Package com.castlabs.sdk.base.subtitles.utilities

# 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[]`
  `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

  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`.
  `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.

  ### 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:
      - `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.

  - ### 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.