/*
- * Svjatoslav Commons - shared library of common functionality.
- * Copyright (C) 2012, 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;
-/**
- * Write individual bits to the output stream.
- */
import java.io.IOException;
import java.io.OutputStream;
+/**
+ * Write individual bits to the output stream.
+ */
public class BitOutputStream {
- int currentByte;
- int currentBytePointer;
-
- OutputStream outputStream;
-
- public BitOutputStream(final OutputStream outputStream) {
- currentByte = 0;
- currentBytePointer = 0;
- this.outputStream = outputStream;
- };
-
- public void finishByte() throws IOException {
- if (currentBytePointer != 0) {
- outputStream.write(currentByte);
- currentBytePointer = 0;
- }
- }
-
- public void storeBits(final int data, final int bitCount)
- throws IOException {
- for (int i = bitCount - 1; i >= 0; i--) {
-
- int mask = 1;
- mask = mask << i;
-
- final int currentBit = data & mask;
- currentByte = currentByte << 1;
-
- if (currentBit != 0) {
- currentByte = currentByte | 1;
- }
- currentBytePointer++;
-
- if (currentBytePointer == 8) {
- currentBytePointer = 0;
- outputStream.write(currentByte);
- currentByte = 0;
- }
- }
- }
-
- public void storeIntegerCompressed8(final int data) throws IOException {
- if (data < 256) {
- storeBits(0, 1);
- storeBits(data, 8);
- } else {
- storeBits(1, 1);
- storeBits(data, 32);
- }
- }
+ private final OutputStream outputStream;
+ private int currentByte;
+ private int currentBytePointer;
+
+ public BitOutputStream(final OutputStream outputStream) {
+ currentByte = 0;
+ currentBytePointer = 0;
+ this.outputStream = outputStream;
+ }
+
+ public void finishByte() throws IOException {
+ if (currentBytePointer != 0) {
+ outputStream.write(currentByte);
+ currentBytePointer = 0;
+ }
+ }
+
+ public void storeBits(final int data, final int bitCount)
+ throws IOException {
+ for (int i = bitCount - 1; i >= 0; i--) {
+
+ int mask = 1;
+ mask = mask << i;
+
+ final int currentBit = data & mask;
+ currentByte = currentByte << 1;
+
+ if (currentBit != 0)
+ currentByte = currentByte | 1;
+ currentBytePointer++;
+
+ if (currentBytePointer == 8) {
+ currentBytePointer = 0;
+ outputStream.write(currentByte);
+ currentByte = 0;
+ }
+ }
+ }
}