Class ParsableBitArray


  • public final class ParsableBitArray
    extends Object
    Wraps a byte array, providing methods that allow it to be read as a bitstream.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      byte[] data  
    • Constructor Summary

      Constructors 
      Constructor Description
      ParsableBitArray()
      Creates a new instance that initially has no backing data.
      ParsableBitArray​(byte[] data)
      Creates a new instance that wraps an existing array.
      ParsableBitArray​(byte[] data, int limit)
      Creates a new instance that wraps an existing array.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      int bitsLeft()
      Returns the number of bits yet to be read.
      void byteAlign()
      Aligns the position to the next byte boundary.
      int getBytePosition()
      Returns the current byte offset.
      int getPosition()
      Returns the current bit offset.
      void putInt​(int value, int numBits)
      Overwrites numBits from this array using the numBits least significant bits from value.
      boolean readBit()
      Reads a single bit.
      void readBits​(byte[] buffer, int offset, int numBits)
      Reads numBits bits into buffer.
      int readBits​(int numBits)
      Reads up to 32 bits.
      long readBitsToLong​(int numBits)
      Reads up to 64 bits.
      void readBytes​(byte[] buffer, int offset, int length)
      Reads the next length bytes into buffer.
      String readBytesAsString​(int length)
      Reads the next length bytes as a UTF-8 string.
      String readBytesAsString​(int length, Charset charset)
      Reads the next length bytes as a string encoded in Charset.
      void reset​(byte[] data)
      Updates the instance to wrap data, and resets the position to zero.
      void reset​(byte[] data, int limit)
      Updates the instance to wrap data, and resets the position to zero.
      void reset​(ParsableByteArray parsableByteArray)
      Sets this instance's data, position and limit to match the provided parsableByteArray.
      void setPosition​(int position)
      Sets the current bit offset.
      void skipBit()
      Skips a single bit.
      void skipBits​(int numBits)
      Skips bits and moves current reading position forward.
      void skipBytes​(int length)
      Skips the next length bytes.
    • Field Detail

      • data

        public byte[] data
    • Constructor Detail

      • ParsableBitArray

        public ParsableBitArray()
        Creates a new instance that initially has no backing data.
      • ParsableBitArray

        public ParsableBitArray​(byte[] data)
        Creates a new instance that wraps an existing array.
        Parameters:
        data - The data to wrap.
      • ParsableBitArray

        public ParsableBitArray​(byte[] data,
                                int limit)
        Creates a new instance that wraps an existing array.
        Parameters:
        data - The data to wrap.
        limit - The limit in bytes.
    • Method Detail

      • reset

        public void reset​(byte[] data)
        Updates the instance to wrap data, and resets the position to zero.
        Parameters:
        data - The array to wrap.
      • reset

        public void reset​(ParsableByteArray parsableByteArray)
        Sets this instance's data, position and limit to match the provided parsableByteArray. Any modifications to the underlying data array will be visible in both instances
        Parameters:
        parsableByteArray - The ParsableByteArray.
      • reset

        public void reset​(byte[] data,
                          int limit)
        Updates the instance to wrap data, and resets the position to zero.
        Parameters:
        data - The array to wrap.
        limit - The limit in bytes.
      • bitsLeft

        public int bitsLeft()
        Returns the number of bits yet to be read.
      • getPosition

        public int getPosition()
        Returns the current bit offset.
      • getBytePosition

        public int getBytePosition()
        Returns the current byte offset. Must only be called when the position is byte aligned.
        Throws:
        IllegalStateException - If the position isn't byte aligned.
      • setPosition

        public void setPosition​(int position)
        Sets the current bit offset.
        Parameters:
        position - The position to set.
      • skipBit

        public void skipBit()
        Skips a single bit.
      • skipBits

        public void skipBits​(int numBits)
        Skips bits and moves current reading position forward.
        Parameters:
        numBits - The number of bits to skip.
      • readBit

        public boolean readBit()
        Reads a single bit.
        Returns:
        Whether the bit is set.
      • readBits

        public int readBits​(int numBits)
        Reads up to 32 bits.
        Parameters:
        numBits - The number of bits to read.
        Returns:
        An integer whose bottom numBits bits hold the read data.
      • readBitsToLong

        public long readBitsToLong​(int numBits)
        Reads up to 64 bits.
        Parameters:
        numBits - The number of bits to read.
        Returns:
        A long whose bottom numBits bits hold the read data.
      • readBits

        public void readBits​(byte[] buffer,
                             int offset,
                             int numBits)
        Reads numBits bits into buffer.
        Parameters:
        buffer - The array into which the read data should be written. The trailing numBits % 8 bits are written into the most significant bits of the last modified buffer byte. The remaining ones are unmodified.
        offset - The offset in buffer at which the read data should be written.
        numBits - The number of bits to read.
      • byteAlign

        public void byteAlign()
        Aligns the position to the next byte boundary. Does nothing if the position is already aligned.
      • readBytes

        public void readBytes​(byte[] buffer,
                              int offset,
                              int length)
        Reads the next length bytes into buffer. Must only be called when the position is byte aligned.
        Parameters:
        buffer - The array into which the read data should be written.
        offset - The offset in buffer at which the read data should be written.
        length - The number of bytes to read.
        Throws:
        IllegalStateException - If the position isn't byte aligned.
        See Also:
        System.arraycopy(Object, int, Object, int, int)
      • skipBytes

        public void skipBytes​(int length)
        Skips the next length bytes. Must only be called when the position is byte aligned.
        Parameters:
        length - The number of bytes to read.
        Throws:
        IllegalStateException - If the position isn't byte aligned.
      • readBytesAsString

        public String readBytesAsString​(int length)
        Reads the next length bytes as a UTF-8 string. Must only be called when the position is byte aligned.
        Parameters:
        length - The number of bytes to read.
        Returns:
        The string encoded by the bytes in UTF-8.
      • readBytesAsString

        public String readBytesAsString​(int length,
                                        Charset charset)
        Reads the next length bytes as a string encoded in Charset. Must only be called when the position is byte aligned.
        Parameters:
        length - The number of bytes to read.
        charset - The character set of the encoded characters.
        Returns:
        The string encoded by the bytes in the specified character set.
      • putInt

        public void putInt​(int value,
                           int numBits)
        Overwrites numBits from this array using the numBits least significant bits from value. Bits are written in order from most significant to least significant. The read position is advanced by numBits.
        Parameters:
        value - The integer whose numBits least significant bits are written into data.
        numBits - The number of bits to write.