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)
OverwritesnumBits
from this array using thenumBits
least significant bits fromvalue
.boolean
readBit()
Reads a single bit.void
readBits(byte[] buffer, int offset, int numBits)
ReadsnumBits
bits intobuffer
.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 nextlength
bytes intobuffer
.String
readBytesAsString(int length)
Reads the nextlength
bytes as a UTF-8 string.String
readBytesAsString(int length, Charset charset)
Reads the nextlength
bytes as a string encoded inCharset
.void
reset(byte[] data)
Updates the instance to wrapdata
, and resets the position to zero.void
reset(byte[] data, int limit)
Updates the instance to wrapdata
, and resets the position to zero.void
reset(ParsableByteArray parsableByteArray)
Sets this instance's data, position and limit to match the providedparsableByteArray
.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 nextlength
bytes.
-
-
-
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 wrapdata
, 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 providedparsableByteArray
. Any modifications to the underlying data array will be visible in both instances- Parameters:
parsableByteArray
- TheParsableByteArray
.
-
reset
public void reset(byte[] data, int limit)
Updates the instance to wrapdata
, 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)
ReadsnumBits
bits intobuffer
.- Parameters:
buffer
- The array into which the read data should be written. The trailingnumBits % 8
bits are written into the most significant bits of the last modifiedbuffer
byte. The remaining ones are unmodified.offset
- The offset inbuffer
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 nextlength
bytes intobuffer
. 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 inbuffer
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 nextlength
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 nextlength
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 nextlength
bytes as a string encoded inCharset
. 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)
OverwritesnumBits
from this array using thenumBits
least significant bits fromvalue
. Bits are written in order from most significant to least significant. The read position is advanced bynumBits
.- Parameters:
value
- The integer whosenumBits
least significant bits are written intodata
.numBits
- The number of bits to write.
-
-