/*
- * Svjatoslav Commons - shared library of common functionality.
- * Copyright ©2012-2013, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public License
- * as published by the Free Software Foundation.
+ * Svjatoslav Commons - shared library of common functionality. Author: Svjatoslav Agejenko.
+ * This project is released under Creative Commons Zero (CC0) license.
*/
-
package eu.svjatoslav.commons.data;
-/**
- * Read individual bits from the input stream.
- */
import java.io.IOException;
import java.io.InputStream;
+/**
+ * Read individual bits from the input stream.
+ */
public class BitInputStream {
- int currentByte;
- int currentBytePointer = -1;
-
- InputStream inputStream;
-
- public BitInputStream(final InputStream inputStream) {
- this.inputStream = inputStream;
- }
+ private final InputStream inputStream;
+ private int currentByte;
+ private int currentBytePointer = -1;
- public int readBits(final int bitCount) throws IOException {
+ public BitInputStream(final InputStream inputStream) {
+ this.inputStream = inputStream;
+ }
- int readableByte = 0;
- for (int i = 0; i < bitCount; i++) {
+ public int readBits(final int bitCount) throws IOException {
- readableByte = readableByte << 1;
+ int readableByte = 0;
+ for (int i = 0; i < bitCount; i++) {
- if (currentBytePointer == -1) {
- currentBytePointer = 7;
- currentByte = inputStream.read();
- }
+ readableByte = readableByte << 1;
- int mask = 1;
- mask = mask << currentBytePointer;
+ if (currentBytePointer == -1) {
+ currentBytePointer = 7;
+ currentByte = inputStream.read();
+ }
- final int currentBit = currentByte & mask;
+ int mask = 1;
+ mask = mask << currentBytePointer;
- if (currentBit != 0)
- readableByte = readableByte | 1;
+ final int currentBit = currentByte & mask;
- currentBytePointer--;
- }
- return readableByte;
- }
+ if (currentBit != 0)
+ readableByte = readableByte | 1;
- public int readIntegerCompressed8() throws IOException {
- if (readBits(1) == 0)
- return readBits(8);
- else
- return readBits(32);
- }
+ currentBytePointer--;
+ }
+ return readableByte;
+ }
}