org.apache.cassandra.utils

## Class ByteBufferUtil

- java.lang.Object
- - org.apache.cassandra.utils.ByteBufferUtil

    public class ByteBufferUtil
    extends java.lang.Object

Utility methods to make ByteBuffers less painful The following should illustrate the different ways byte buffers can be used public void testArrayOffet() { byte[] b = "test_slice_array".getBytes(); ByteBuffer bb = ByteBuffer.allocate(1024); assert bb.position() == 0; assert bb.limit() == 1024; assert bb.capacity() == 1024; bb.put(b); assert bb.position() == b.length; assert bb.remaining() == bb.limit() - bb.position(); ByteBuffer bb2 = bb.slice(); assert bb2.position() == 0; //slice should begin at other buffers current position assert bb2.arrayOffset() == bb.position(); //to match the position in the underlying array one needs to //track arrayOffset assert bb2.limit()+bb2.arrayOffset() == bb.limit(); assert bb2.remaining() == bb.remaining(); } }

### Field Summary

Fields
`static java.nio.ByteBuffer` `EMPTY_BYTE_BUFFER`
`static java.nio.ByteBuffer` `UNSET_BYTE_BUFFER` Represents an unset value in bound variables

### Constructor Summary

Constructors
Constructor and Description
`ByteBufferUtil()`

### Method Summary

All Methods Static Methods Concrete Methods
`static void` `arrayCopy(java.nio.ByteBuffer src, int srcPos, byte[] dst, int dstPos, int length)`
`static void` `arrayCopy(java.nio.ByteBuffer src, int srcPos, java.nio.ByteBuffer dst, int dstPos, int length)` Transfer bytes from one ByteBuffer to another.
`static java.nio.ByteBuffer` `bytes(double d)`
`static java.nio.ByteBuffer` `bytes(float f)`
`static java.nio.ByteBuffer` `bytes(java.net.InetAddress address)`
`static java.nio.ByteBuffer` `bytes(int i)`
`static java.nio.ByteBuffer` `bytes(long n)`
`static java.nio.ByteBuffer` `bytes(short s)`
`static java.nio.ByteBuffer` `bytes(java.lang.String s)` Encode a String in a ByteBuffer using UTF_8.
`static java.nio.ByteBuffer` `bytes(java.lang.String s, java.nio.charset.Charset charset)` Encode a String in a ByteBuffer using the provided charset.
`static java.nio.ByteBuffer` `bytes(java.util.UUID uuid)`
`static java.lang.String` `bytesToHex(java.nio.ByteBuffer bytes)`
`static java.nio.ByteBuffer` `clone(java.nio.ByteBuffer buffer)`
`static int` `compare(byte[] o1, java.nio.ByteBuffer o2)`
`static int` `compare(java.nio.ByteBuffer o1, byte[] o2)`
`static int` `compareSubArrays(java.nio.ByteBuffer bytes1, int offset1, java.nio.ByteBuffer bytes2, int offset2, int length)` Compare two ByteBuffer at specified offsets for length.
`static int` `compareUnsigned(java.nio.ByteBuffer o1, java.nio.ByteBuffer o2)`
`static boolean` `contains(java.nio.ByteBuffer buffer, java.nio.ByteBuffer subBuffer)` Check is the given buffer contains a given sub-buffer.
`static boolean` `endsWith(java.nio.ByteBuffer src, java.nio.ByteBuffer suffix)`
`static java.nio.ByteBuffer` `ensureCapacity(java.nio.ByteBuffer buf, int outputLength, boolean allowBufferResize)` Ensure `buf` is large enough for `outputLength`.
`static java.nio.ByteBuffer` `ensureCapacity(java.nio.ByteBuffer buf, int outputLength, boolean allowBufferResize, BufferType bufferType)` Ensure `buf` is large enough for `outputLength`.
`static byte[]` `getArray(java.nio.ByteBuffer buffer)` You should almost never use this.
`static int` `getShortLength(java.nio.ByteBuffer bb, int position)`
`static java.nio.ByteBuffer` `hexToBytes(java.lang.String str)`
`static java.io.InputStream` `inputStream(java.nio.ByteBuffer bytes)`
`static boolean` `isPrefix(java.nio.ByteBuffer prefix, java.nio.ByteBuffer value)`
`static int` `lastIndexOf(java.nio.ByteBuffer buffer, byte valueToFind, int startIndex)` ByteBuffer adaptation of org.apache.commons.lang3.ArrayUtils.lastIndexOf method
`static java.nio.ByteBuffer` `minimalBufferFor(java.nio.ByteBuffer buf)` trims size of bytebuffer to exactly number of bytes in it, to do not hold too much memory
`static int` `put(java.nio.ByteBuffer src, java.nio.ByteBuffer trg)`
`static java.nio.ByteBuffer` `read(java.io.DataInput in, int length)`
`static java.nio.ByteBuffer` `readBytes(java.nio.ByteBuffer bb, int length)`
`static byte[]` `readBytes(java.io.DataInput in, int length)`
`static java.nio.ByteBuffer` `readBytesWithShortLength(java.nio.ByteBuffer bb)`
`static int` `readShortLength(java.nio.ByteBuffer bb)`
`static int` `readShortLength(java.io.DataInput in)`
`static java.nio.ByteBuffer` `readWithLength(java.io.DataInput in)`
`static java.nio.ByteBuffer` `readWithShortLength(java.io.DataInput in)`
`static java.nio.ByteBuffer` `readWithVIntLength(DataInputPlus in)`
`static int` `serializedSizeWithLength(java.nio.ByteBuffer buffer)`
`static int` `serializedSizeWithShortLength(java.nio.ByteBuffer buffer)`
`static int` `serializedSizeWithVIntLength(java.nio.ByteBuffer buffer)`
`static void` `skipShortLength(DataInputPlus in)`
`static void` `skipWithVIntLength(DataInputPlus in)`
`static boolean` `startsWith(java.nio.ByteBuffer src, java.nio.ByteBuffer prefix)`
`static java.lang.String` `string(java.nio.ByteBuffer buffer)` Decode a String representation.
`static java.lang.String` `string(java.nio.ByteBuffer buffer, java.nio.charset.Charset charset)` Decode a String representation.
`static java.lang.String` `string(java.nio.ByteBuffer buffer, int position, int length)` Decode a String representation.
`static java.lang.String` `string(java.nio.ByteBuffer buffer, int position, int length, java.nio.charset.Charset charset)` Decode a String representation.
`static double` `toDouble(java.nio.ByteBuffer bytes)`
`static float` `toFloat(java.nio.ByteBuffer bytes)`
`static int` `toInt(java.nio.ByteBuffer bytes)` Convert a byte buffer to an integer.
`static long` `toLong(java.nio.ByteBuffer bytes)`
`static short` `toShort(java.nio.ByteBuffer bytes)` Convert a byte buffer to a short.
`static void` `writeShortLength(java.nio.ByteBuffer bb, int length)`
`static void` `writeWithLength(byte[] bytes, java.io.DataOutput out)`
`static void` `writeWithLength(java.nio.ByteBuffer bytes, DataOutputPlus out)`
`static void` `writeWithShortLength(byte[] buffer, java.io.DataOutput out)`
`static void` `writeWithShortLength(java.nio.ByteBuffer buffer, DataOutputPlus out)`
`static void` `writeWithVIntLength(java.nio.ByteBuffer bytes, DataOutputPlus out)`

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

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

### Field Detail

#### EMPTY_BYTE_BUFFER

    public static final java.nio.ByteBuffer EMPTY_BYTE_BUFFER

#### UNSET_BYTE_BUFFER

    public static final java.nio.ByteBuffer UNSET_BYTE_BUFFER

Represents an unset value in bound variables

### Constructor Detail

#### ByteBufferUtil

    public ByteBufferUtil()

### Method Detail

#### compareUnsigned

    @Inline
    public static int compareUnsigned(java.nio.ByteBuffer o1,
                                              java.nio.ByteBuffer o2)

#### compare

    @Inline
    public static int compare(byte[] o1,
                                      java.nio.ByteBuffer o2)

#### compare

    @Inline
    public static int compare(java.nio.ByteBuffer o1,
                                      byte[] o2)

#### string

    public static java.lang.String string(java.nio.ByteBuffer buffer)
                                   throws java.nio.charset.CharacterCodingException

Decode a String representation. This method assumes that the encoding charset is UTF_8.

Parameters:
  `buffer` - a byte buffer holding the string representation
Returns:
  the decoded string
Throws:
  `java.nio.charset.CharacterCodingException`

#### string

    public static java.lang.String string(java.nio.ByteBuffer buffer,
                                          int position,
                                          int length)
                                   throws java.nio.charset.CharacterCodingException

Decode a String representation. This method assumes that the encoding charset is UTF_8.

Parameters:
  `buffer` - a byte buffer holding the string representation
  `position` - the starting position in `buffer` to start decoding from
  `length` - the number of bytes from `buffer` to use
Returns:
  the decoded string
Throws:
  `java.nio.charset.CharacterCodingException`

#### string

    public static java.lang.String string(java.nio.ByteBuffer buffer,
                                          int position,
                                          int length,
                                          java.nio.charset.Charset charset)
                                   throws java.nio.charset.CharacterCodingException

Decode a String representation.

Parameters:
  `buffer` - a byte buffer holding the string representation
  `position` - the starting position in `buffer` to start decoding from
  `length` - the number of bytes from `buffer` to use
  `charset` - the String encoding charset
Returns:
  the decoded string
Throws:
  `java.nio.charset.CharacterCodingException`

#### string

    public static java.lang.String string(java.nio.ByteBuffer buffer,
                                          java.nio.charset.Charset charset)
                                   throws java.nio.charset.CharacterCodingException

Decode a String representation.

Parameters:
  `buffer` - a byte buffer holding the string representation
  `charset` - the String encoding charset
Returns:
  the decoded string
Throws:
  `java.nio.charset.CharacterCodingException`

#### getArray

    public static byte[] getArray(java.nio.ByteBuffer buffer)

You should almost never use this. Instead, use the write* methods to avoid copies.

#### lastIndexOf

    public static int lastIndexOf(java.nio.ByteBuffer buffer,
                                  byte valueToFind,
                                  int startIndex)

ByteBuffer adaptation of org.apache.commons.lang3.ArrayUtils.lastIndexOf method

Parameters:
  `buffer` - the array to traverse for looking for the object, may be `null`
  `valueToFind` - the value to find
  `startIndex` - the start index (i.e. BB position) to travers backwards from
Returns:
  the last index (i.e. BB position) of the value within the array [between buffer.position() and buffer.limit()]; `-1` if not found.

#### bytes

    public static java.nio.ByteBuffer bytes(java.lang.String s)

Encode a String in a ByteBuffer using UTF_8.

Parameters:
  `s` - the string to encode
Returns:
  the encoded string

#### bytes

    public static java.nio.ByteBuffer bytes(java.lang.String s,
                                            java.nio.charset.Charset charset)

Encode a String in a ByteBuffer using the provided charset.

Parameters:
  `s` - the string to encode
  `charset` - the String encoding charset to use
Returns:
  the encoded string

#### clone

    public static java.nio.ByteBuffer clone(java.nio.ByteBuffer buffer)

Returns:
  a new copy of the data in @param buffer USUALLY YOU SHOULD USE ByteBuffer.duplicate() INSTEAD, which creates a new Buffer (so you can mutate its position without affecting the original) without copying the underlying array.

#### arrayCopy

    public static void arrayCopy(java.nio.ByteBuffer src,
                                 int srcPos,
                                 byte[] dst,
                                 int dstPos,
                                 int length)

#### arrayCopy

    public static void arrayCopy(java.nio.ByteBuffer src,
                                 int srcPos,
                                 java.nio.ByteBuffer dst,
                                 int dstPos,
                                 int length)

Transfer bytes from one ByteBuffer to another. This function acts as System.arrayCopy() but for ByteBuffers.

Parameters:
  `src` - the source ByteBuffer
  `srcPos` - starting position in the source ByteBuffer
  `dst` - the destination ByteBuffer
  `dstPos` - starting position in the destination ByteBuffer
  `length` - the number of bytes to copy

#### put

    public static int put(java.nio.ByteBuffer src,
                          java.nio.ByteBuffer trg)

#### writeWithLength

    public static void writeWithLength(java.nio.ByteBuffer bytes,
                                       DataOutputPlus out)
                                throws java.io.IOException

Throws:
  `java.io.IOException`

#### writeWithVIntLength

    public static void writeWithVIntLength(java.nio.ByteBuffer bytes,
                                           DataOutputPlus out)
                                    throws java.io.IOException

Throws:
  `java.io.IOException`

#### writeWithLength

    public static void writeWithLength(byte[] bytes,
                                       java.io.DataOutput out)
                                throws java.io.IOException

Throws:
  `java.io.IOException`

#### writeWithShortLength

    public static void writeWithShortLength(java.nio.ByteBuffer buffer,
                                            DataOutputPlus out)
                                     throws java.io.IOException

Throws:
  `java.io.IOException`

#### writeWithShortLength

    public static void writeWithShortLength(byte[] buffer,
                                            java.io.DataOutput out)
                                     throws java.io.IOException

Throws:
  `java.io.IOException`

#### readWithLength

    public static java.nio.ByteBuffer readWithLength(java.io.DataInput in)
                                              throws java.io.IOException

Throws:
  `java.io.IOException`

#### readWithVIntLength

    public static java.nio.ByteBuffer readWithVIntLength(DataInputPlus in)
                                                  throws java.io.IOException

Throws:
  `java.io.IOException`

#### serializedSizeWithLength

    public static int serializedSizeWithLength(java.nio.ByteBuffer buffer)

#### serializedSizeWithVIntLength

    public static int serializedSizeWithVIntLength(java.nio.ByteBuffer buffer)

#### skipWithVIntLength

    public static void skipWithVIntLength(DataInputPlus in)
                                   throws java.io.IOException

Throws:
  `java.io.IOException`

#### readShortLength

    public static int readShortLength(java.io.DataInput in)
                               throws java.io.IOException

Throws:
  `java.io.IOException`

#### readWithShortLength

    public static java.nio.ByteBuffer readWithShortLength(java.io.DataInput in)
                                                   throws java.io.IOException

Parameters:
  `in` - data input
Returns:
  An unsigned short in an integer.
Throws:
  `java.io.IOException` - if an I/O error occurs.

#### serializedSizeWithShortLength

    public static int serializedSizeWithShortLength(java.nio.ByteBuffer buffer)

#### skipShortLength

    public static void skipShortLength(DataInputPlus in)
                                throws java.io.IOException

Parameters:
  `in` - data input
Throws:
  `java.io.IOException` - if an I/O error occurs.

#### read

    public static java.nio.ByteBuffer read(java.io.DataInput in,
                                           int length)
                                    throws java.io.IOException

Throws:
  `java.io.IOException`

#### readBytes

    public static byte[] readBytes(java.io.DataInput in,
                                   int length)
                            throws java.io.IOException

Throws:
  `java.io.IOException`

#### toInt

    public static int toInt(java.nio.ByteBuffer bytes)

Convert a byte buffer to an integer. Does not change the byte buffer position.

Parameters:
  `bytes` - byte buffer to convert to integer
Returns:
  int representation of the byte buffer

#### toShort

    public static short toShort(java.nio.ByteBuffer bytes)

Convert a byte buffer to a short. Does not change the byte buffer position.

Parameters:
  `bytes` - byte buffer to convert to short
Returns:
  short representation of the byte buffer

#### toLong

    public static long toLong(java.nio.ByteBuffer bytes)

#### toFloat

    public static float toFloat(java.nio.ByteBuffer bytes)

#### toDouble

    public static double toDouble(java.nio.ByteBuffer bytes)

#### bytes

    public static java.nio.ByteBuffer bytes(short s)

#### bytes

    public static java.nio.ByteBuffer bytes(int i)

#### bytes

    public static java.nio.ByteBuffer bytes(long n)

#### bytes

    public static java.nio.ByteBuffer bytes(float f)

#### bytes

    public static java.nio.ByteBuffer bytes(double d)

#### inputStream

    public static java.io.InputStream inputStream(java.nio.ByteBuffer bytes)

#### bytesToHex

    public static java.lang.String bytesToHex(java.nio.ByteBuffer bytes)

#### hexToBytes

    public static java.nio.ByteBuffer hexToBytes(java.lang.String str)

#### compareSubArrays

    public static int compareSubArrays(java.nio.ByteBuffer bytes1,
                                       int offset1,
                                       java.nio.ByteBuffer bytes2,
                                       int offset2,
                                       int length)

Compare two ByteBuffer at specified offsets for length. Compares the non equal bytes as unsigned.

Parameters:
  `bytes1` - First byte buffer to compare.
  `offset1` - Position to start the comparison at in the first array.
  `bytes2` - Second byte buffer to compare.
  `offset2` - Position to start the comparison at in the second array.
  `length` - How many bytes to compare?
Returns:
  -1 if byte1 is less than byte2, 1 if byte2 is less than byte1 or 0 if equal.

#### bytes

    public static java.nio.ByteBuffer bytes(java.net.InetAddress address)

#### bytes

    public static java.nio.ByteBuffer bytes(java.util.UUID uuid)

#### isPrefix

    public static boolean isPrefix(java.nio.ByteBuffer prefix,
                                   java.nio.ByteBuffer value)

#### minimalBufferFor

    public static java.nio.ByteBuffer minimalBufferFor(java.nio.ByteBuffer buf)

trims size of bytebuffer to exactly number of bytes in it, to do not hold too much memory

#### getShortLength

    public static int getShortLength(java.nio.ByteBuffer bb,
                                     int position)

#### readShortLength

    public static int readShortLength(java.nio.ByteBuffer bb)

#### writeShortLength

    public static void writeShortLength(java.nio.ByteBuffer bb,
                                        int length)

#### readBytes

    public static java.nio.ByteBuffer readBytes(java.nio.ByteBuffer bb,
                                                int length)

#### readBytesWithShortLength

    public static java.nio.ByteBuffer readBytesWithShortLength(java.nio.ByteBuffer bb)

#### ensureCapacity

    public static java.nio.ByteBuffer ensureCapacity(java.nio.ByteBuffer buf,
                                                     int outputLength,
                                                     boolean allowBufferResize)

Ensure `buf` is large enough for `outputLength`. If not, it is cleaned up and a new buffer is allocated; else; buffer has it's position/limit set appropriately.

Parameters:
  `buf` - buffer to test the size of; may be null, in which case, a new buffer is allocated.
  `outputLength` - the minimum target size of the buffer
  `allowBufferResize` - true if resizing (reallocating) the buffer is allowed
Returns:
  `buf` if it was large enough, else a newly allocated buffer.

#### ensureCapacity

    public static java.nio.ByteBuffer ensureCapacity(java.nio.ByteBuffer buf,
                                                     int outputLength,
                                                     boolean allowBufferResize,
                                                     BufferType bufferType)

Ensure `buf` is large enough for `outputLength`. If not, it is cleaned up and a new buffer is allocated; else; buffer has it's position/limit set appropriately.

Parameters:
  `buf` - buffer to test the size of; may be null, in which case, a new buffer is allocated.
  `outputLength` - the minimum target size of the buffer
  `allowBufferResize` - true if resizing (reallocating) the buffer is allowed
  `bufferType` - on- or off- heap byte buffer
Returns:
  `buf` if it was large enough, else a newly allocated buffer.

#### contains

    public static boolean contains(java.nio.ByteBuffer buffer,
                                   java.nio.ByteBuffer subBuffer)

Check is the given buffer contains a given sub-buffer.

Parameters:
  `buffer` - The buffer to search for sequence of bytes in.
  `subBuffer` - The buffer to match.
Returns:
  true if buffer contains sub-buffer, false otherwise.

#### startsWith

    public static boolean startsWith(java.nio.ByteBuffer src,
                                     java.nio.ByteBuffer prefix)

#### endsWith

    public static boolean endsWith(java.nio.ByteBuffer src,
                                   java.nio.ByteBuffer suffix)