Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

package com.gebauz.Bauzoid.file;

import java.io.DataInput;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;

/** Version of DataInputStream that supports little endian. */
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));
        }
 
        /** 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();
        }
 
        @SuppressWarnings("deprecation")
        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
         
}