123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- package min3d.parser;
- import java.io.DataInput;
- import java.io.DataInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- /**
- * Taken from http://www.peterfranza.com/2008/09/26/little-endian-input-stream/
- * @author dennis.ippel
- *
- */
- public class LittleEndianDataInputStream extends InputStream implements DataInput {
-
- public LittleEndianDataInputStream(InputStream in) {
- this.in = in;
- this.d = new DataInputStream(in);
- w = new byte[8];
- }
-
- public int available() throws IOException {
- return d.available();
- }
-
-
- public final short readShort() throws IOException
- {
- d.readFully(w, 0, 2);
- return (short)(
- (w[1]&0xff) << 8 |
- (w[0]&0xff));
- }
-
- public String readString(int length) throws IOException {
- if (length == 0) {
- return null;
- }
- byte[] b = new byte[length];
- d.readFully(b);
- return new String(b, "US-ASCII");
- }
-
- /**
- * Note, returns int even though it reads a short.
- */
- public final int readUnsignedShort() throws IOException
- {
- d.readFully(w, 0, 2);
- return (
- (w[1]&0xff) << 8 |
- (w[0]&0xff));
- }
-
- /**
- * like DataInputStream.readChar except little endian.
- */
- public final char readChar() throws IOException
- {
- d.readFully(w, 0, 2);
- return (char) (
- (w[1]&0xff) << 8 |
- (w[0]&0xff));
- }
-
- /**
- * like DataInputStream.readInt except little endian.
- */
- public final int readInt() throws IOException
- {
- d.readFully(w, 0, 4);
- return
- (w[3]) << 24 |
- (w[2]&0xff) << 16 |
- (w[1]&0xff) << 8 |
- (w[0]&0xff);
- }
-
- /**
- * like DataInputStream.readLong except little endian.
- */
- public final long readLong() throws IOException
- {
- d.readFully(w, 0, 8);
- return
- (long)(w[7]) << 56 |
- (long)(w[6]&0xff) << 48 |
- (long)(w[5]&0xff) << 40 |
- (long)(w[4]&0xff) << 32 |
- (long)(w[3]&0xff) << 24 |
- (long)(w[2]&0xff) << 16 |
- (long)(w[1]&0xff) << 8 |
- (long)(w[0]&0xff);
- }
-
- public final float readFloat() throws IOException {
- return Float.intBitsToFloat(readInt());
- }
-
- public final double readDouble() throws IOException {
- return Double.longBitsToDouble(readLong());
- }
-
- public final int read(byte b[], int off, int len) throws IOException {
- return in.read(b, off, len);
- }
-
- public final void readFully(byte b[]) throws IOException {
- d.readFully(b, 0, b.length);
- }
-
- public final void readFully(byte b[], int off, int len) throws IOException {
- d.readFully(b, off, len);
- }
-
- public final int skipBytes(int n) throws IOException {
- return d.skipBytes(n);
- }
-
- public final boolean readBoolean() throws IOException {
- return d.readBoolean();
- }
-
- public final byte readByte() throws IOException {
- return d.readByte();
- }
-
- public int read() throws IOException {
- return in.read();
- }
-
- public final int readUnsignedByte() throws IOException {
- return d.readUnsignedByte();
- }
-
- @Deprecated
- public final String readLine() throws IOException {
- return d.readLine();
- }
-
- public final String readUTF() throws IOException {
- return d.readUTF();
- }
-
- public final void close() throws IOException {
- d.close();
- }
-
- private DataInputStream d; // to get at high level readFully methods of
- // DataInputStream
- private InputStream in; // to get at the low-level read methods of
- // InputStream
- private byte w[]; // work array for buffering input
- }
|