Class BitOutputStream

java.lang.Object
java.io.OutputStream
com.webcodepro.shrinkit.io.BitOutputStream
All Implemented Interfaces:
BitConstants, Closeable, Flushable, AutoCloseable

public class BitOutputStream extends OutputStream implements BitConstants
The BitOutputStream allows varying bit sizes to be written to the wrapped OutputStream. This is useful for LZW type compression algorithms where 9-12 bit codes are used instead of the 8-bit byte.

Warning: The write(byte[]) and write(byte[], int, int) methods of OutputStream will not work appropriately with any bit size > 8 bits.

  • Constructor Details

    • BitOutputStream

      public BitOutputStream(OutputStream os, int startingNumberOfBits)
      Create a BitOutpuStream wrapping the given OutputStream and writing the number of bits specified.
  • Method Details

    • setRequestedNumberOfBits

      public void setRequestedNumberOfBits(int numberOfBits)
      Set the number of bits to be write with each call to write(int).
    • increaseRequestedNumberOfBits

      public void increaseRequestedNumberOfBits()
      Increase the requested number of bits by one. This is the general usage and prevents client from needing to track the requested number of bits or from making various method calls.
    • getBitMask

      public int getBitMask()
      Answer with the current bit mask for the current bit size.
    • write

      public void write(int b) throws IOException
      Write the number of bits to the wrapped OutputStream.
      Specified by:
      write in class OutputStream
      Throws:
      IOException
    • clearRemainingBitsOfData

      public void clearRemainingBitsOfData()
      When shifting from buffer to buffer, this OutputStream also should be reset. This allows the "left over" bits to be cleared.
    • close

      public void close() throws IOException
      Close the output stream and write any remaining byte to the output. Note that we may very well end up with extra bits if there are < 8 bits remaining.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Overrides:
      close in class OutputStream
      Throws:
      IOException