Package org.apache.hadoop.hbase.util
Class ByteBufferUtils
java.lang.Object
org.apache.hadoop.hbase.util.ByteBufferUtils
Utility functions for working with byte buffers, such as reading/writing variable-length long
numbers.
-
Nested Class Summary
Modifier and TypeClassDescription(package private) static class
(package private) static class
(package private) static class
(package private) static class
(package private) static class
(package private) static class
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
static final int
(package private) static final boolean
static final boolean
static final int
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic boolean
arePartsEqual
(ByteBuffer buffer, int offsetLeft, int lengthLeft, int offsetRight, int lengthRight) Check whether two parts in the same buffer are equal.static int
compareTo
(byte[] buf1, int o1, int l1, ByteBuffer buf2, int o2, int l2) static int
compareTo
(ByteBuffer buf1, int o1, int l1, byte[] buf2, int o2, int l2) static int
compareTo
(ByteBuffer buf1, int o1, int l1, ByteBuffer buf2, int o2, int l2) (package private) static int
compareToUnsafe
(Object obj1, long o1, int l1, Object obj2, long o2, int l2) static void
copyBufferToStream
(DataOutput out, ByteBuffer in, int offset, int length) Copy data from a buffer to an output stream.static void
copyBufferToStream
(OutputStream out, ByteBuffer in, int offset, int length) Copy data from a buffer to an output stream.static void
copyFromArrayToBuffer
(ByteBuffer out, byte[] in, int inOffset, int length) Copies the bytes from given array's offset to length part into the given buffer.static void
copyFromArrayToBuffer
(ByteBuffer out, int outOffset, byte[] in, int inOffset, int length) Copies bytes from given array's offset to length part into the given buffer.static void
copyFromBufferToArray
(byte[] out, ByteBuffer in, int sourceOffset, int destinationOffset, int length) Copies specified number of bytes from given offset of 'in' ByteBuffer to the array.static void
copyFromBufferToBuffer
(ByteBuffer in, ByteBuffer out) Copy one buffer's whole data to another.static void
copyFromBufferToBuffer
(ByteBuffer in, ByteBuffer out, int sourceOffset, int length) Copy from one buffer to another from given offset.static void
copyFromBufferToBuffer
(ByteBuffer in, ByteBuffer out, int sourceOffset, int destinationOffset, int length) Copy from one buffer to another from given offset.static void
copyFromStreamToBuffer
(ByteBuffer out, DataInputStream in, int length) Copy the given number of bytes from the given stream and put it at the current position of the given buffer, updating the position in the buffer.static byte[]
copyOfRange
(ByteBuffer original, int from, int to) Similar toArrays.copyOfRange(byte[], int, int)
static ByteBuffer
Copy from the InputStream to a new heap ByteBuffer until the InputStream is exhausted.static boolean
equals
(ByteBuffer buf1, int o1, int l1, byte[] buf2, int o2, int l2) static boolean
equals
(ByteBuffer buf1, int o1, int l1, ByteBuffer buf2, int o2, int l2) static void
extendLimit
(ByteBuffer buffer, int numBytes) static int
findCommonPrefix
(byte[] left, int leftOffset, int leftLength, byte[] right, int rightOffset, int rightLength) Find length of common prefix in two arrays.static int
findCommonPrefix
(ByteBuffer left, int leftOffset, int leftLength, byte[] right, int rightOffset, int rightLength) Find length of common prefix in two arrays.static int
findCommonPrefix
(ByteBuffer left, int leftOffset, int leftLength, ByteBuffer right, int rightOffset, int rightLength) Find length of common prefix in two arrays.(package private) static int
findCommonPrefixUnsafe
(Object left, long leftOffset, int leftLength, Object right, long rightOffset, int rightLength) static int
hashCode
(ByteBuffer buf, int offset, int length) ByteBuffer to hash offset to start from length to hashstatic int
intFitsIn
(int value) Check how many bytes is required to store value.static int
longFitsIn
(long value) Check how many bytes are required to store value.static void
moveBufferToStream
(OutputStream out, ByteBuffer in, int length) Copy the data to the output stream and update position in buffer.static int
putAsShort
(ByteBuffer buf, int index, int val) static int
putByte
(ByteBuffer buffer, int offset, byte b) static int
putCompressedInt
(OutputStream out, int value) Put in buffer integer using 7 bit encoding.static void
putInt
(OutputStream out, int value) Put in output stream 32 bit integer (Big Endian byte order).static void
putInt
(ByteBuffer buffer, int val) Put an int value out to the given ByteBuffer's current position in big-endian format.static int
putInt
(ByteBuffer buffer, int index, int val) static int
putLong
(OutputStream out, long value, int fitInBytes) static int
putLong
(ByteBuffer buffer, int index, long val) static void
putLong
(ByteBuffer buffer, long val) Put a long value out to the given ByteBuffer's current position in big-endian format.static int
putShort
(ByteBuffer buffer, int index, short val) static void
putShort
(ByteBuffer buffer, short val) Put a short value out to the given ByteBuffer's current position in big-endian format.static int
readAsInt
(ByteBuffer buf, int offset, int length) Converts a ByteBuffer to an int valuestatic int
readCompressedInt
(InputStream input) Read integer from stream coded in 7 bits and increment position.static int
readCompressedInt
(ByteBuffer buffer) Read integer from buffer coded in 7 bits and increment position.static long
readLong
(InputStream in, int fitInBytes) Read long which was written to fitInBytes bytes and increment position.static long
readLong
(ByteBuffer in, int fitInBytes) Read long which was written to fitInBytes bytes and increment position.static long
readVLong
(ByteBuffer buf) Similar toWritableUtils.readVLong(DataInput)
but reads from aByteBuffer
.static long
Similar toWritableUtils.readVLong(java.io.DataInput)
but reads from aByteBuff
.static int
searchDelimiterIndex
(ByteBuffer b, int offset, int length, int delimiter) Find index of passed delimiter.static int
searchDelimiterIndexInReverse
(ByteBuffer b, int offset, int length, int delimiter) Find index of passed delimiter walking from end of buffer backwards.static void
skip
(ByteBuffer buffer, int length) Increment position in buffer.static BigDecimal
toBigDecimal
(ByteBuffer buffer, int offset, int length) Reads a BigDecimal value at the given buffer's offset.static byte
toByte
(ByteBuffer buffer, int offset) static byte[]
toBytes
(ByteBuffer buffer, int startPosition) Copy the bytes from position to limit into a new byte[] of the exact length and sets the position and limit back to their original values (though not thread safe).static byte[]
toBytes
(ByteBuffer buffer, int offset, int length) Copy the given number of bytes from specified offset into a new byte[]static double
toDouble
(ByteBuffer buffer, int offset) Reads a double value at the given buffer's offset.static int
toInt
(ByteBuffer buffer) Reads an int value at the given buffer's current position.static int
toInt
(ByteBuffer buffer, int offset) Reads an int value at the given buffer's offset.static long
toLong
(ByteBuffer buffer, int offset) Reads a long value at the given buffer's offset.static short
toShort
(ByteBuffer buffer, int offset) Reads a short value at the given buffer's offset.static String
static String
toStringBinary
(ByteBuffer b, int off, int len) static void
writeVLong
(ByteBuffer out, long i) Similar toWritableUtils.writeVLong(java.io.DataOutput, long)
, but writes to aByteBuffer
.
-
Field Details
-
VALUE_MASK
- See Also:
-
NEXT_BIT_SHIFT
- See Also:
-
NEXT_BIT_MASK
- See Also:
-
UNSAFE_AVAIL
-
UNSAFE_UNALIGNED
-
-
Constructor Details
-
ByteBufferUtils
private ByteBufferUtils()
-
-
Method Details
-
writeVLong
Similar toWritableUtils.writeVLong(java.io.DataOutput, long)
, but writes to aByteBuffer
. -
readVLong
Similar toWritableUtils.readVLong(java.io.DataInput)
but reads from aByteBuff
. -
readVLong
Similar toWritableUtils.readVLong(DataInput)
but reads from aByteBuffer
. -
putCompressedInt
Put in buffer integer using 7 bit encoding. For each written byte: 7 bits are used to store value 1 bit is used to indicate whether there is next bit.- Parameters:
value
- Int to be compressed.out
- Where to put compressed data- Returns:
- Number of bytes written.
- Throws:
IOException
- on stream error
-
putInt
Put in output stream 32 bit integer (Big Endian byte order).- Parameters:
out
- Where to put integer.value
- Value of integer.- Throws:
IOException
- On stream error.
-
toByte
-
moveBufferToStream
public static void moveBufferToStream(OutputStream out, ByteBuffer in, int length) throws IOException Copy the data to the output stream and update position in buffer.- Parameters:
out
- the stream to write bytes toin
- the buffer to read bytes fromlength
- the number of bytes to copy- Throws:
IOException
-
copyBufferToStream
public static void copyBufferToStream(OutputStream out, ByteBuffer in, int offset, int length) throws IOException Copy data from a buffer to an output stream. Does not update the position in the buffer.- Parameters:
out
- the stream to write bytes toin
- the buffer to read bytes fromoffset
- the offset in the buffer (from the buffer's array offset) to start copying bytes fromlength
- the number of bytes to copy- Throws:
IOException
-
copyBufferToStream
public static void copyBufferToStream(DataOutput out, ByteBuffer in, int offset, int length) throws IOException Copy data from a buffer to an output stream. Does not update the position in the buffer.- Parameters:
out
- the output stream to write bytes toin
- the buffer to read bytes fromoffset
- the offset in the buffer (from the buffer's array offset) to start copying bytes fromlength
- the number of bytes to copy- Throws:
IOException
-
putLong
- Throws:
IOException
-
putByte
-
longFitsIn
Check how many bytes are required to store value.- Parameters:
value
- Value which size will be tested.- Returns:
- How many bytes are required to store value.
-
intFitsIn
Check how many bytes is required to store value.- Parameters:
value
- Value which size will be tested.- Returns:
- How many bytes are required to store value.
-
readCompressedInt
Read integer from stream coded in 7 bits and increment position.- Returns:
- the integer that has been read
- Throws:
IOException
- on stream error
-
readCompressedInt
Read integer from buffer coded in 7 bits and increment position.- Returns:
- Read integer.
-
readLong
Read long which was written to fitInBytes bytes and increment position.- Parameters:
fitInBytes
- In how many bytes given long is stored.- Returns:
- The value of parsed long.
- Throws:
IOException
- on stream error
-
readLong
Read long which was written to fitInBytes bytes and increment position.- Parameters:
fitInBytes
- In how many bytes given long is stored.- Returns:
- The value of parsed long.
-
copyFromStreamToBuffer
public static void copyFromStreamToBuffer(ByteBuffer out, DataInputStream in, int length) throws IOException Copy the given number of bytes from the given stream and put it at the current position of the given buffer, updating the position in the buffer.- Parameters:
out
- the buffer to write data toin
- the stream to read data fromlength
- the number of bytes to read/write- Throws:
IOException
-
drainInputStreamToBuffer
Copy from the InputStream to a new heap ByteBuffer until the InputStream is exhausted.- Throws:
IOException
-
copyFromBufferToBuffer
Copy one buffer's whole data to another. Write starts at the current position of 'out' buffer. Note : This will advance the position marker ofout
and also change the position maker forin
.- Parameters:
in
- source bufferout
- destination buffer
-
copyFromBufferToBuffer
public static void copyFromBufferToBuffer(ByteBuffer in, ByteBuffer out, int sourceOffset, int destinationOffset, int length) Copy from one buffer to another from given offset. This will be absolute positional copying and won't affect the position of any of the buffers.- Parameters:
in
- input bytebufferout
- destination bytebuffersourceOffset
- offset of source bufferdestinationOffset
- offset of destination bufferlength
- the number of bytes to copy
-
copyFromBufferToBuffer
public static void copyFromBufferToBuffer(ByteBuffer in, ByteBuffer out, int sourceOffset, int length) Copy from one buffer to another from given offset.Note : This will advance the position marker of
out
but not change the position maker forin
- Parameters:
in
- source bufferout
- destination buffersourceOffset
- offset in the source bufferlength
- how many bytes to copy
-
findCommonPrefix
public static int findCommonPrefix(byte[] left, int leftOffset, int leftLength, byte[] right, int rightOffset, int rightLength) Find length of common prefix in two arrays.- Parameters:
left
- Array to be compared.leftOffset
- Offset in left array.leftLength
- Length of left array.right
- Array to be compared.rightOffset
- Offset in right array.rightLength
- Length of right array.
-
findCommonPrefix
public static int findCommonPrefix(ByteBuffer left, int leftOffset, int leftLength, ByteBuffer right, int rightOffset, int rightLength) Find length of common prefix in two arrays.- Parameters:
left
- ByteBuffer to be compared.leftOffset
- Offset in left ByteBuffer.leftLength
- Length of left ByteBuffer.right
- ByteBuffer to be compared.rightOffset
- Offset in right ByteBuffer.rightLength
- Length of right ByteBuffer.
-
findCommonPrefix
public static int findCommonPrefix(ByteBuffer left, int leftOffset, int leftLength, byte[] right, int rightOffset, int rightLength) Find length of common prefix in two arrays.- Parameters:
left
- ByteBuffer to be compared.leftOffset
- Offset in left ByteBuffer.leftLength
- Length of left ByteBuffer.right
- Array to be comparedrightOffset
- Offset in right Array.rightLength
- Length of right Array.
-
arePartsEqual
public static boolean arePartsEqual(ByteBuffer buffer, int offsetLeft, int lengthLeft, int offsetRight, int lengthRight) Check whether two parts in the same buffer are equal.- Parameters:
buffer
- In which buffer there are partsoffsetLeft
- Beginning of first part.lengthLeft
- Length of the first part.offsetRight
- Beginning of the second part.lengthRight
- Length of the second part.- Returns:
- True if equal
-
skip
Increment position in buffer.- Parameters:
buffer
- In this buffer.length
- By that many bytes.
-
extendLimit
-
toBytes
Copy the bytes from position to limit into a new byte[] of the exact length and sets the position and limit back to their original values (though not thread safe).- Parameters:
buffer
- copy from herestartPosition
- put buffer.get(startPosition) into byte[0]- Returns:
- a new byte[] containing the bytes in the specified range
-
toBytes
Copy the given number of bytes from specified offset into a new byte[]- Parameters:
buffer
- input bytebuffer to readoffset
- input offset where Bytes arelength
- the number of bytes to read- Returns:
- a new byte[] containing the bytes in the specified range
-
equals
-
hashCode
ByteBuffer to hash offset to start from length to hash -
compareTo
-
equals
-
compareTo
-
compareTo
-
compareToUnsafe
-
findCommonPrefixUnsafe
static int findCommonPrefixUnsafe(Object left, long leftOffset, int leftLength, Object right, long rightOffset, int rightLength) -
toShort
Reads a short value at the given buffer's offset.- Parameters:
buffer
- input byte buffer to readoffset
- input offset where short is- Returns:
- short value at offset
-
toInt
Reads an int value at the given buffer's current position. Also advances the buffer's position -
toInt
Reads an int value at the given buffer's offset.- Parameters:
buffer
- input byte buffer to readoffset
- input offset where int is- Returns:
- int value at offset
-
readAsInt
Converts a ByteBuffer to an int value- Parameters:
buf
- The ByteBufferoffset
- Offset to int valuelength
- Number of bytes used to store the int value.- Returns:
- the int value if there's not enough bytes left in the buffer after the given offset
-
toLong
Reads a long value at the given buffer's offset.- Parameters:
buffer
- input byte buffer to readoffset
- input offset where Long is- Returns:
- long value at offset
-
putInt
Put an int value out to the given ByteBuffer's current position in big-endian format. This also advances the position in buffer by int size.- Parameters:
buffer
- the ByteBuffer to write toval
- int to write out
-
putInt
-
toDouble
Reads a double value at the given buffer's offset.- Parameters:
buffer
- input byte buffer to readoffset
- offset where double is- Returns:
- double value at offset
-
toBigDecimal
Reads a BigDecimal value at the given buffer's offset.- Parameters:
buffer
- input bytebuffer to readoffset
- input offset- Returns:
- BigDecimal value at offset
-
putShort
Put a short value out to the given ByteBuffer's current position in big-endian format. This also advances the position in buffer by short size.- Parameters:
buffer
- the ByteBuffer to write toval
- short to write out
-
putShort
-
putAsShort
-
putLong
Put a long value out to the given ByteBuffer's current position in big-endian format. This also advances the position in buffer by long size.- Parameters:
buffer
- the ByteBuffer to write toval
- long to write out
-
putLong
-
copyFromArrayToBuffer
Copies the bytes from given array's offset to length part into the given buffer. Puts the bytes to buffer's current position. This also advances the position in the 'out' buffer by 'length'- Parameters:
out
- output bytebuffer to copy toin
- input array to copy frominOffset
- input offset to copy fromlength
- the number of bytes to copy
-
copyFromArrayToBuffer
public static void copyFromArrayToBuffer(ByteBuffer out, int outOffset, byte[] in, int inOffset, int length) Copies bytes from given array's offset to length part into the given buffer. Puts the bytes to buffer's given position. This doesn't affect the position of buffer.- Parameters:
out
- output bytebuffer to copy tooutOffset
- output buffer offsetin
- input array to copy frominOffset
- input offset to copy fromlength
- the number of bytes to copy
-
copyFromBufferToArray
public static void copyFromBufferToArray(byte[] out, ByteBuffer in, int sourceOffset, int destinationOffset, int length) Copies specified number of bytes from given offset of 'in' ByteBuffer to the array. This doesn't affect the position of buffer.- Parameters:
out
- output array to copy input bytebuffer toin
- input bytebuffer to copy fromsourceOffset
- offset of source bytebufferdestinationOffset
- offset of destination arraylength
- the number of bytes to copy
-
copyOfRange
Similar toArrays.copyOfRange(byte[], int, int)
- Parameters:
original
- the buffer from which the copy has to happenfrom
- the starting indexto
- the ending index- Returns:
- a byte[] created out of the copy
-
toStringBinary
-
toStringBinary
-
searchDelimiterIndex
Find index of passed delimiter.- Returns:
- Index of delimiter having started from start of
b
moving rightward.
-
searchDelimiterIndexInReverse
public static int searchDelimiterIndexInReverse(ByteBuffer b, int offset, int length, int delimiter) Find index of passed delimiter walking from end of buffer backwards.- Returns:
- Index of delimiter
-