/**
* Copyright 2000-2009 DFKI GmbH.
* All Rights Reserved. Use is subject to license terms.
*
* This file is part of MARY TTS.
*
* MARY TTS is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package marytts.util.io;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class LittleEndianBinaryReader {
private DataInputStream inputStream;
private long accumLong;
private int accumInt;
private int shiftBy;
private int low;
private int high;
public LittleEndianBinaryReader(DataInputStream d) {
this.inputStream = d;
}
public LittleEndianBinaryReader(FileInputStream f) {
this(new DataInputStream(f));
}
public LittleEndianBinaryReader(String filename) throws IOException {
this(new DataInputStream(new FileInputStream(filename)));
}
/*
* public float readFloat() throws IOException { for (int i=0; i<4; i++) bytes[i] = inputStream.readByte();
*
* return Float.intBitsToFloat(((0x0ff & bytes[0])<<0) | ((0x0ff & bytes[1])<<8) | ((0x0ff & bytes[2])<<16) | ((0x0ff &
* bytes[3])<<24)); }
*/
public short readShort() throws IOException {
low = inputStream.readByte() & 0xff;
high = inputStream.readByte() & 0xff;
return (short) (high << 8 | low);
}
public long readLong() throws IOException {
accumLong = 0;
for (shiftBy = 0; shiftBy < 64; shiftBy += 8)
accumLong |= (long) (inputStream.readByte() & 0xff) << shiftBy;
return accumLong;
}
public char readChar() throws IOException {
low = inputStream.readByte() & 0xff;
high = inputStream.readByte();
return (char) (high << 8 | low);
}
public int readInt() throws IOException {
accumInt = 0;
for (shiftBy = 0; shiftBy < 32; shiftBy += 8) {
accumInt |= (inputStream.readByte() & 0xff) << shiftBy;
}
return accumInt;
}
public double readDouble() throws IOException {
accumLong = 0;
for (shiftBy = 0; shiftBy < 64; shiftBy += 8)
accumLong |= ((long) (inputStream.readByte() & 0xff)) << shiftBy;
return Double.longBitsToDouble(accumLong);
}
public float readFloat() throws IOException {
accumInt = 0;
for (shiftBy = 0; shiftBy < 32; shiftBy += 8)
accumInt |= (inputStream.readByte() & 0xff) << shiftBy;
return Float.intBitsToFloat(accumInt);
}
public byte readByte() throws IOException {
return inputStream.readByte();
}
public void close() throws IOException {
if (inputStream != null)
inputStream.close();
}
}