Class ParsableBitArray

java.lang.Object
com.castlabs.sdk.base.subtitles.utilities.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[]
     
  • Constructor Summary

    Constructors
    Constructor
    Description
    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

    Modifier and Type
    Method
    Description
    int
    Returns the number of bits yet to be read.
    void
    Aligns the position to the next byte boundary.
    int
    Returns the current byte offset.
    int
    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
    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.
    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
    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.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • data

      public byte[] data
  • Constructor Details

    • 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 Details

    • 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 Util.
    • 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:
    • 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.
    • 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.