public class BitInputStream {
- int currentByte;
- int currentBytePointer = -1;
+ private final InputStream inputStream;
+ private int currentByte;
+ private int currentBytePointer = -1;
- InputStream inputStream;
+ public BitInputStream(final InputStream inputStream) {
+ this.inputStream = inputStream;
+ }
- public BitInputStream(final InputStream inputStream) {
- this.inputStream = inputStream;
- }
+ public int readBits(final int bitCount) throws IOException {
- public int readBits(final int bitCount) throws IOException {
+ int readableByte = 0;
+ for (int i = 0; i < bitCount; i++) {
- int readableByte = 0;
- for (int i = 0; i < bitCount; i++) {
+ readableByte = readableByte << 1;
- readableByte = readableByte << 1;
+ if (currentBytePointer == -1) {
+ currentBytePointer = 7;
+ currentByte = inputStream.read();
+ }
- if (currentBytePointer == -1) {
- currentBytePointer = 7;
- currentByte = inputStream.read();
- }
+ int mask = 1;
+ mask = mask << currentBytePointer;
- int mask = 1;
- mask = mask << currentBytePointer;
+ final int currentBit = currentByte & mask;
- final int currentBit = currentByte & mask;
+ if (currentBit != 0)
+ readableByte = readableByte | 1;
- if (currentBit != 0)
- readableByte = readableByte | 1;
-
- currentBytePointer--;
- }
- return readableByte;
- }
+ currentBytePointer--;
+ }
+ return readableByte;
+ }
}