67 lines
1.6 KiB
Java
67 lines
1.6 KiB
Java
package org.insa.graph.io;
|
|
|
|
import java.io.DataInputStream;
|
|
import java.io.IOException;
|
|
|
|
public abstract class BinaryReader {
|
|
|
|
// Map version and magic number targeted for this reader.
|
|
private int version;
|
|
private int magicNumber;
|
|
|
|
// InputStream
|
|
protected DataInputStream dis;
|
|
|
|
protected BinaryReader(int magicNumber, int version, DataInputStream dis) {
|
|
this.magicNumber = magicNumber;
|
|
this.version = version;
|
|
this.dis = dis;
|
|
}
|
|
|
|
/**
|
|
* @param version
|
|
* @throws BadVersionException
|
|
*/
|
|
public void checkVersionOrThrow(int version) throws BadVersionException {
|
|
if (this.version != version) {
|
|
throw new BadVersionException(version, this.version);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param magicNumber
|
|
* @throws BadMagicNumberException
|
|
*/
|
|
public void checkMagicNumberOrThrow(int magicNumber) throws BadMagicNumberException {
|
|
if (this.magicNumber != magicNumber) {
|
|
throw new BadMagicNumberException(magicNumber, this.magicNumber);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check if the next byte in the input stream correspond to the
|
|
* given byte. This function consumes the next byte in the input
|
|
* stream.
|
|
*
|
|
* @param i Byte to check against.
|
|
*
|
|
* @throws IOException
|
|
*/
|
|
public void checkByteOrThrow(int i) throws IOException {
|
|
if (dis.readUnsignedByte() != i) {
|
|
throw new BadFormatException();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Read 24 bits from the stream and return the corresponding integer value.
|
|
*
|
|
* @return Integer value read from the next 24 bits of the stream.
|
|
*
|
|
* @throws IOException
|
|
*/
|
|
protected int read24bits() throws IOException {
|
|
int x = dis.readUnsignedShort() ;
|
|
return (x << 8) | dis.readUnsignedByte() ;
|
|
}
|
|
}
|