package micromod;
import java.io.*;
/**
The DataReader contains methods to convert data on an implementation
of DataInput into a more useful format.
DataInput is only used to read bytes and arrays of bytes to aid portability.
*/
public class DataReader {
protected static final int CONVERT_BUFFER_SIZE = 16384;
protected byte[] convertBuffer;
protected DataInput input;
/** Constructor */
public DataReader( DataInput input ) {
this.input = input;
convertBuffer = new byte[CONVERT_BUFFER_SIZE];
}
/** Read length 16 bit signed, big endian words from the DataInput device into the specified array.*/
public void readSigned16BitArray( short[] array, int offset, int length ) throws IOException {
// Need to be able to recover as many bytes as possible after eof.
System.out.println("DataReader : operation not implemented !");
}
/** Read a signed 32 bit integer. */
public static int readInt32( DataInput input ) throws IOException {
return input.readInt();
}
/** Read a positive number from a byte between 0 and 127. */
public static byte readUnsigned7Bit( DataInput input ) throws IOException {
return (byte)(input.readByte() & 0x7F);
}
/** Read a single signed byte. */
public static byte readSigned8Bit( DataInput input ) throws IOException {
return input.readByte();
}
/** Read a single unsigned byte. */
public static int readUnsigned8Bit( DataInput input ) throws IOException {
return input.readUnsignedByte();
}
/** Read length 8 bit signed words from the DataInput device into the specified array.*/
public static void readSigned8BitArray( DataInput input, byte[] array, int offset, int length ) throws IOException {
input.readFully( array, offset, length );
}
/** Read a single signed 16 bit word. */
public static short readSigned16Bit( DataInput input ) throws IOException {
return input.readShort();
}
/** Read a single unsigned 16 bit word. */
public static int readUnsigned16Bit( DataInput input ) throws IOException {
return input.readUnsignedShort();
}
/**
Simple method to read ASCII text and convert nulls to spaces.
*/
public static String readText( DataInput input, int count ) throws IOException {
byte[] bytes = new byte[count];
input.readFully( bytes );
for( int n=0; n<count; n++ )
if( bytes[n] == 0 )
bytes[n] = 32;
return new String( bytes, "8859_1" );
}
}