Class ByteBufUtil


  • public final class ByteBufUtil
    extends java.lang.Object
    A collection of utility methods that is related with handling ByteBuf, such as the generation of hex dump and swapping an integer's byte order.
    • Method Detail

      • isAccessible

        public static boolean isAccessible​(ByteBuf buffer)
        Returns:
        whether the specified buffer has a nonzero ref count
      • hexDump

        public static java.lang.String hexDump​(ByteBuf buffer)
        Returns a hex dump of the specified buffer's readable bytes.
      • hexDump

        public static java.lang.String hexDump​(ByteBuf buffer,
                                               int fromIndex,
                                               int length)
        Returns a hex dump of the specified buffer's sub-region.
      • hexDump

        public static java.lang.String hexDump​(byte[] array)
        Returns a hex dump of the specified byte array.
      • hexDump

        public static java.lang.String hexDump​(byte[] array,
                                               int fromIndex,
                                               int length)
        Returns a hex dump of the specified byte array's sub-region.
      • decodeHexByte

        public static byte decodeHexByte​(java.lang.CharSequence s,
                                         int pos)
        Decode a 2-digit hex byte from within a string.
      • decodeHexDump

        public static byte[] decodeHexDump​(java.lang.CharSequence hexDump)
        Decodes a string generated by hexDump(byte[])
      • decodeHexDump

        public static byte[] decodeHexDump​(java.lang.CharSequence hexDump,
                                           int fromIndex,
                                           int length)
        Decodes part of a string generated by hexDump(byte[])
      • ensureWritableSuccess

        public static boolean ensureWritableSuccess​(int ensureWritableResult)
        Used to determine if the return value of ByteBuf.ensureWritable(int, boolean) means that there is adequate space and a write operation will succeed.
        Parameters:
        ensureWritableResult - The return value from ByteBuf.ensureWritable(int, boolean).
        Returns:
        true if ensureWritableResult means that there is adequate space and a write operation will succeed.
      • hashCode

        public static int hashCode​(ByteBuf buffer)
        Calculates the hash code of the specified buffer. This method is useful when implementing a new buffer type.
      • indexOf

        public static int indexOf​(ByteBuf needle,
                                  ByteBuf haystack)
        Returns the reader index of needle in haystack, or -1 if needle is not in haystack. This method uses the Two-Way string matching algorithm, which yields O(1) space complexity and excellent performance.
      • equals

        public static boolean equals​(ByteBuf a,
                                     int aStartIndex,
                                     ByteBuf b,
                                     int bStartIndex,
                                     int length)
        Returns true if and only if the two specified buffers are identical to each other for length bytes starting at aStartIndex index for the a buffer and bStartIndex index for the b buffer. A more compact way to express this is:

        a[aStartIndex : aStartIndex + length] == b[bStartIndex : bStartIndex + length]

      • equals

        public static boolean equals​(ByteBuf bufferA,
                                     ByteBuf bufferB)
        Returns true if and only if the two specified buffers are identical to each other as described in ByteBuf.equals(Object). This method is useful when implementing a new buffer type.
      • compare

        public static int compare​(ByteBuf bufferA,
                                  ByteBuf bufferB)
        Compares the two specified buffers as described in ByteBuf.compareTo(ByteBuf). This method is useful when implementing a new buffer type.
      • indexOf

        public static int indexOf​(ByteBuf buffer,
                                  int fromIndex,
                                  int toIndex,
                                  byte value)
        The default implementation of ByteBuf.indexOf(int, int, byte). This method is useful when implementing a new buffer type.
      • swapShort

        public static short swapShort​(short value)
        Toggles the endianness of the specified 16-bit short integer.
      • swapMedium

        public static int swapMedium​(int value)
        Toggles the endianness of the specified 24-bit medium integer.
      • swapInt

        public static int swapInt​(int value)
        Toggles the endianness of the specified 32-bit integer.
      • swapLong

        public static long swapLong​(long value)
        Toggles the endianness of the specified 64-bit long integer.
      • writeShortBE

        public static ByteBuf writeShortBE​(ByteBuf buf,
                                           int shortValue)
        Writes a big-endian 16-bit short integer to the buffer.
      • setShortBE

        public static ByteBuf setShortBE​(ByteBuf buf,
                                         int index,
                                         int shortValue)
        Sets a big-endian 16-bit short integer to the buffer.
      • writeMediumBE

        public static ByteBuf writeMediumBE​(ByteBuf buf,
                                            int mediumValue)
        Writes a big-endian 24-bit medium integer to the buffer.
      • readUnsignedShortBE

        public static int readUnsignedShortBE​(ByteBuf buf)
        Reads a big-endian unsigned 16-bit short integer from the buffer.
      • readIntBE

        public static int readIntBE​(ByteBuf buf)
        Reads a big-endian 32-bit integer from the buffer.
      • writeUtf8

        public static ByteBuf writeUtf8​(ByteBufAllocator alloc,
                                        java.lang.CharSequence seq)
        Encode a CharSequence in UTF-8 and write it to a ByteBuf allocated with alloc.
        Parameters:
        alloc - The allocator used to allocate a new ByteBuf.
        seq - The characters to write into a buffer.
        Returns:
        The ByteBuf which contains the UTF-8 encoded result.
      • reserveAndWriteUtf8

        public static int reserveAndWriteUtf8​(ByteBuf buf,
                                              java.lang.CharSequence seq,
                                              int reserveBytes)
        Encode a CharSequence in UTF-8 and write it into reserveBytes of a ByteBuf.

        The reserveBytes must be computed (ie eagerly using utf8MaxBytes(CharSequence) or exactly with utf8Bytes(CharSequence)) to ensure this method to not fail: for performance reasons the index checks will be performed using just reserveBytes.
        This method returns the actual number of bytes written.

      • utf8MaxBytes

        public static int utf8MaxBytes​(int seqLength)
        Returns max bytes length of UTF8 character sequence of the given length.
      • utf8MaxBytes

        public static int utf8MaxBytes​(java.lang.CharSequence seq)
        Returns max bytes length of UTF8 character sequence.

        It behaves like utf8MaxBytes(int) applied to seq CharSequence.length().

      • utf8Bytes

        public static int utf8Bytes​(java.lang.CharSequence seq)
        Returns the exact bytes length of UTF8 character sequence.

        This method is producing the exact length according to writeUtf8(ByteBuf, CharSequence).

      • writeAscii

        public static ByteBuf writeAscii​(ByteBufAllocator alloc,
                                         java.lang.CharSequence seq)
        Encode a CharSequence in ASCII and write it to a ByteBuf allocated with alloc.
        Parameters:
        alloc - The allocator used to allocate a new ByteBuf.
        seq - The characters to write into a buffer.
        Returns:
        The ByteBuf which contains the ASCII encoded result.
      • writeAscii

        public static int writeAscii​(ByteBuf buf,
                                     java.lang.CharSequence seq)
        Encode a CharSequence in ASCII and write it to a ByteBuf. This method returns the actual number of bytes written.
      • encodeString

        public static ByteBuf encodeString​(ByteBufAllocator alloc,
                                           java.nio.CharBuffer src,
                                           java.nio.charset.Charset charset)
        Encode the given CharBuffer using the given Charset into a new ByteBuf which is allocated via the ByteBufAllocator.
      • encodeString

        public static ByteBuf encodeString​(ByteBufAllocator alloc,
                                           java.nio.CharBuffer src,
                                           java.nio.charset.Charset charset,
                                           int extraCapacity)
        Encode the given CharBuffer using the given Charset into a new ByteBuf which is allocated via the ByteBufAllocator.
        Parameters:
        alloc - The ByteBufAllocator to allocate ByteBuf.
        src - The CharBuffer to encode.
        charset - The specified Charset.
        extraCapacity - the extra capacity to alloc except the space for decoding.
      • threadLocalDirectBuffer

        public static ByteBuf threadLocalDirectBuffer()
        Returns a cached thread-local direct buffer, if available.
        Returns:
        a cached thread-local direct buffer, if available. null otherwise.
      • getBytes

        public static byte[] getBytes​(ByteBuf buf,
                                      int start,
                                      int length)
        Create a copy of the underlying storage from buf into a byte array. The copy will start at start and copy length bytes.
      • getBytes

        public static byte[] getBytes​(ByteBuf buf,
                                      int start,
                                      int length,
                                      boolean copy)
        Return an array of the underlying storage from buf into a byte array. The copy will start at start and copy length bytes. If copy is true a copy will be made of the memory. If copy is false the underlying storage will be shared, if possible.
      • copy

        public static void copy​(AsciiString src,
                                int srcIdx,
                                ByteBuf dst,
                                int length)
        Copies the content of src to a ByteBuf using ByteBuf.writeBytes(byte[], int, int).
        Parameters:
        src - the source string to copy
        srcIdx - the starting offset of characters to copy
        dst - the destination buffer
        length - the number of characters to copy
      • prettyHexDump

        public static java.lang.String prettyHexDump​(ByteBuf buffer)
        Returns a multi-line hexadecimal dump of the specified ByteBuf that is easy to read by humans.
      • prettyHexDump

        public static java.lang.String prettyHexDump​(ByteBuf buffer,
                                                     int offset,
                                                     int length)
        Returns a multi-line hexadecimal dump of the specified ByteBuf that is easy to read by humans, starting at the given offset using the given length.
      • appendPrettyHexDump

        public static void appendPrettyHexDump​(java.lang.StringBuilder dump,
                                               ByteBuf buf)
        Appends the prettified multi-line hexadecimal dump of the specified ByteBuf to the specified StringBuilder that is easy to read by humans.
      • appendPrettyHexDump

        public static void appendPrettyHexDump​(java.lang.StringBuilder dump,
                                               ByteBuf buf,
                                               int offset,
                                               int length)
        Appends the prettified multi-line hexadecimal dump of the specified ByteBuf to the specified StringBuilder that is easy to read by humans, starting at the given offset using the given length.
      • isText

        public static boolean isText​(ByteBuf buf,
                                     java.nio.charset.Charset charset)
        Returns true if the given ByteBuf is valid text using the given Charset, otherwise return false.
        Parameters:
        buf - The given ByteBuf.
        charset - The specified Charset.
      • isText

        public static boolean isText​(ByteBuf buf,
                                     int index,
                                     int length,
                                     java.nio.charset.Charset charset)
        Returns true if the specified ByteBuf starting at index with length is valid text using the given Charset, otherwise return false.
        Parameters:
        buf - The given ByteBuf.
        index - The start index of the specified buffer.
        length - The length of the specified buffer.
        charset - The specified Charset.
        Throws:
        java.lang.IndexOutOfBoundsException - if index + length is greater than buf.readableBytes