• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2009-2010 jMonkeyEngine
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  *   notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  *   notice, this list of conditions and the following disclaimer in the
14  *   documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
17  *   may be used to endorse or promote products derived from this software
18  *   without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 package com.jme3.util;
33 
34 import java.io.*;
35 
36 /**
37  * <code>LittleEndien</code> is a class to read littleendien stored data
38  * via a InputStream.  All functions work as defined in DataInput, but
39  * assume they come from a LittleEndien input stream.  Currently used to read .ms3d and .3ds files.
40  * @author Jack Lindamood
41  */
42 public class LittleEndien extends InputStream implements DataInput {
43 
44     private BufferedInputStream in;
45     private BufferedReader inRead;
46 
47     /**
48      * Creates a new LittleEndien reader from the given input stream.  The
49      * stream is wrapped in a BufferedReader automatically.
50      * @param in The input stream to read from.
51      */
LittleEndien(InputStream in)52     public LittleEndien(InputStream in) {
53         this.in = new BufferedInputStream(in);
54         inRead = new BufferedReader(new InputStreamReader(in));
55     }
56 
read()57     public int read() throws IOException {
58         return in.read();
59     }
60 
61     @Override
read(byte[] buf)62     public int read(byte[] buf) throws IOException {
63         return in.read(buf);
64     }
65 
66     @Override
read(byte[] buf, int off, int len)67     public int read(byte[] buf, int off, int len) throws IOException {
68         return in.read(buf, off, len);
69     }
70 
readUnsignedShort()71     public int readUnsignedShort() throws IOException {
72         return (in.read() & 0xff) | ((in.read() & 0xff) << 8);
73     }
74 
75     /**
76      * read an unsigned int as a long
77      */
readUInt()78     public long readUInt() throws IOException {
79         return ((in.read() & 0xff)
80                 | ((in.read() & 0xff) << 8)
81                 | ((in.read() & 0xff) << 16)
82                 | (((long) (in.read() & 0xff)) << 24));
83     }
84 
readBoolean()85     public boolean readBoolean() throws IOException {
86         return (in.read() != 0);
87     }
88 
readByte()89     public byte readByte() throws IOException {
90         return (byte) in.read();
91     }
92 
readUnsignedByte()93     public int readUnsignedByte() throws IOException {
94         return in.read();
95     }
96 
readShort()97     public short readShort() throws IOException {
98         return (short) this.readUnsignedShort();
99     }
100 
readChar()101     public char readChar() throws IOException {
102         return (char) this.readUnsignedShort();
103     }
104 
readInt()105     public int readInt() throws IOException {
106         return ((in.read() & 0xff)
107                 | ((in.read() & 0xff) << 8)
108                 | ((in.read() & 0xff) << 16)
109                 | ((in.read() & 0xff) << 24));
110     }
111 
readLong()112     public long readLong() throws IOException {
113         return ((in.read() & 0xff)
114                 | ((long) (in.read() & 0xff) << 8)
115                 | ((long) (in.read() & 0xff) << 16)
116                 | ((long) (in.read() & 0xff) << 24)
117                 | ((long) (in.read() & 0xff) << 32)
118                 | ((long) (in.read() & 0xff) << 40)
119                 | ((long) (in.read() & 0xff) << 48)
120                 | ((long) (in.read() & 0xff) << 56));
121     }
122 
readFloat()123     public float readFloat() throws IOException {
124         return Float.intBitsToFloat(readInt());
125     }
126 
readDouble()127     public double readDouble() throws IOException {
128         return Double.longBitsToDouble(readLong());
129     }
130 
readFully(byte b[])131     public void readFully(byte b[]) throws IOException {
132         in.read(b, 0, b.length);
133     }
134 
readFully(byte b[], int off, int len)135     public void readFully(byte b[], int off, int len) throws IOException {
136         in.read(b, off, len);
137     }
138 
skipBytes(int n)139     public int skipBytes(int n) throws IOException {
140         return (int) in.skip(n);
141     }
142 
readLine()143     public String readLine() throws IOException {
144         return inRead.readLine();
145     }
146 
readUTF()147     public String readUTF() throws IOException {
148         throw new IOException("Unsupported operation");
149     }
150 
151     @Override
close()152     public void close() throws IOException {
153         in.close();
154     }
155 
156     @Override
available()157     public int available() throws IOException {
158         return in.available();
159     }
160 }
161