Class BitSource


  • public final class BitSource
    extends java.lang.Object

    This provides an easy abstraction to read bits at a time from a sequence of bytes, where the number of bits read is not often a multiple of 8.

    This class is thread-safe but not reentrant -- unless the caller modifies the bytes array it passed in, in which case all bets are off.

    • Field Summary

      Fields 
      Modifier and Type Field Description
      private int bitOffset  
      private int byteOffset  
      private byte[] bytes  
    • Constructor Summary

      Constructors 
      Constructor Description
      BitSource​(byte[] bytes)  
    • Field Detail

      • bytes

        private final byte[] bytes
      • byteOffset

        private int byteOffset
      • bitOffset

        private int bitOffset
    • Constructor Detail

      • BitSource

        public BitSource​(byte[] bytes)
        Parameters:
        bytes - bytes from which this will read bits. Bits will be read from the first byte first. Bits are read within a byte from most-significant to least-significant bit.
    • Method Detail

      • getBitOffset

        public int getBitOffset()
        Returns:
        index of next bit in current byte which would be read by the next call to readBits(int).
      • getByteOffset

        public int getByteOffset()
        Returns:
        index of next byte in input byte array which would be read by the next call to readBits(int).
      • readBits

        public int readBits​(int numBits)
        Parameters:
        numBits - number of bits to read
        Returns:
        int representing the bits read. The bits will appear as the least-significant bits of the int
        Throws:
        java.lang.IllegalArgumentException - if numBits isn't in [1,32] or more than is available
      • available

        public int available()
        Returns:
        number of bits that can be read successfully