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
    Modifier and Type | Field and Description
    --- | ---
    `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
    Modifier and Type | Method and Description
    --- | ---
    `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)

Copyright © 2018 The Apache Software Foundation