Package com.google.android.exoplayer2.util

## Class ParsableBitArray

- java.lang.Object
- - com.google.android.exoplayer2.util.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.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

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