Class Buffers

java.lang.Object
org.glassfish.grizzly.memory.Buffers

public class Buffers extends Object
Class has useful methods to simplify the work with Buffers.
Author:
Alexey Stashok
See Also:
  • Field Details

    • EMPTY_BYTE_BUFFER

      public static final ByteBuffer EMPTY_BYTE_BUFFER
    • EMPTY_BYTE_BUFFER_ARRAY

      public static final ByteBuffer[] EMPTY_BYTE_BUFFER_ARRAY
    • EMPTY_BUFFER

      public static final Buffer EMPTY_BUFFER
  • Constructor Details

    • Buffers

      public Buffers()
  • Method Details

    • getBufferAppender

      public static Appender<Buffer> getBufferAppender(boolean isCompositeBufferDisposable)
      Parameters:
      isCompositeBufferDisposable - if as the result of Buffers appending a new CompositeBuffer will be created - its Buffer.allowBufferDispose(boolean) value will be set according to this parameter.
      Returns:
      the Buffer Appender.
    • wrap

      public static Buffer wrap(MemoryManager memoryManager, String s)
      Returns Buffer, which wraps the String.
      Parameters:
      memoryManager - MemoryManager, which should be used for wrapping.
      s - String
      Returns:
      Buffer wrapper on top of passed String.
    • wrap

      public static Buffer wrap(MemoryManager memoryManager, String s, Charset charset)
      Returns Buffer, which wraps the String with the specific Charset.
      Parameters:
      memoryManager - MemoryManager, which should be used for wrapping.
      s - String
      charset - Charset, which will be used, when converting String to byte array.
      Returns:
      Buffer wrapper on top of passed String.
    • wrap

      public static Buffer wrap(MemoryManager memoryManager, byte[] array)
      Returns Buffer, which wraps the byte array.
      Parameters:
      memoryManager - MemoryManager, which should be used for wrapping.
      array - byte array to wrap.
      Returns:
      Buffer wrapper on top of passed byte array.
    • wrap

      public static Buffer wrap(MemoryManager memoryManager, byte[] array, int offset, int length)
      Returns Buffer, which wraps the part of byte array with specific offset and length.
      Parameters:
      memoryManager - MemoryManager, which should be used for wrapping.
      array - byte array to wrap
      offset - byte buffer offset
      length - byte buffer length
      Returns:
      Buffer wrapper on top of passed byte array.
    • wrap

      public static Buffer wrap(MemoryManager memoryManager, ByteBuffer byteBuffer)
      Returns Buffer, which wraps the ByteBuffer.
      Parameters:
      memoryManager - MemoryManager, which should be used for wrapping.
      byteBuffer - ByteBuffer to wrap
      Returns:
      Buffer wrapper on top of passed ByteBuffer.
    • slice

      public static ByteBuffer slice(ByteBuffer chunk, int size)
      Slice ByteBuffer of required size from big chunk. Passed chunk position will be changed, after the slicing (chunk.position += size).
      Parameters:
      chunk - big ByteBuffer pool.
      size - required slice size.
      Returns:
      sliced ByteBuffer of required size.
    • slice

      public static ByteBuffer slice(ByteBuffer byteBuffer, int position, int limit)
      Get the ByteBuffer's slice basing on its passed position and limit. Position and limit values of the passed ByteBuffer won't be changed. The result ByteBuffer position will be equal to 0, and limit equal to number of sliced bytes (limit - position).
      Parameters:
      byteBuffer - ByteBuffer to slice/
      position - the position in the passed byteBuffer, the slice will start from.
      limit - the limit in the passed byteBuffer, the slice will be ended.
      Returns:
      sliced ByteBuffer of required size.
    • toStringContent

      public static String toStringContent(ByteBuffer byteBuffer, Charset charset, int position, int limit)
    • setPositionLimit

      public static void setPositionLimit(Buffer buffer, int position, int limit)
    • setPositionLimit

      public static void setPositionLimit(ByteBuffer buffer, int position, int limit)
    • put

      public static void put(ByteBuffer srcBuffer, int srcOffset, int length, ByteBuffer dstBuffer)
    • put

      public static void put(Buffer src, int position, int length, Buffer dstBuffer)
    • get

      public static void get(ByteBuffer srcBuffer, byte[] dstBytes, int dstOffset, int length)
    • put

      public static void put(byte[] srcBytes, int srcOffset, int length, ByteBuffer dstBuffer)
    • appendBuffers

      public static Buffer appendBuffers(MemoryManager memoryManager, Buffer buffer1, Buffer buffer2)
      Append two Buffers. If one of the Buffers is null - then another Buffer will be returned as result. If the first Buffer is CompositeBuffer then the second Buffer will be appended to it via CompositeBuffer.append(Buffer), else if the second Buffer is CompositeBuffer then the first Buffer will be prepended to it via CompositeBuffer.prepend(org.glassfish.grizzly.Buffer). If none of the Buffer parameters is null nor CompositeBuffers - then new CompositeBuffer will be created and both Buffers will be added there. The resulting CompositeBuffer will be disallowed for disposal.
      Parameters:
      memoryManager - the MemoryManager to use if a new Buffer needs to be allocated in order to perform the requested operation.
      buffer1 - the Buffer to append to.
      buffer2 - the Buffer to append.
      Returns:
      the result of appending of two Buffers.
    • appendBuffers

      public static Buffer appendBuffers(MemoryManager memoryManager, Buffer buffer1, Buffer buffer2, boolean isCompositeBufferDisposable)
      Append two Buffers. If one of the Buffers is null - then another Buffer will be returned as result. If the first Buffer is CompositeBuffer then the second Buffer will be appended to it via CompositeBuffer.append(Buffer), else if the second Buffer is CompositeBuffer then the first Buffer will be prepended to it via CompositeBuffer.prepend(org.glassfish.grizzly.Buffer). If none of the Buffer parameters is null nor CompositeBuffers - then new CompositeBuffer will be created and both Buffers will be added there. The resulting CompositeBuffer will be assigned according to the isCompositeBufferDisposable parameter.
      Parameters:
      memoryManager - the MemoryManager to use if a new Buffer needs to be allocated in order to perform the requested operation.
      buffer1 - the Buffer to append to.
      buffer2 - the Buffer to append.
      isCompositeBufferDisposable - flag indicating whether or not the resulting composite buffer may be disposed.
      Returns:
      the result of appending of two Buffers.
    • fill

      public static void fill(Buffer buffer, byte b)
      Fill the Buffer with the specific byte value. Buffer's position won't be changed.
      Parameters:
      buffer - Buffer
      b - value
    • fill

      public static void fill(Buffer buffer, int position, int limit, byte b)
      Fill the Buffer's part [position, limit) with the specific byte value starting from the Buffer's position won't be changed.
      Parameters:
      buffer - Buffer
      position - Buffer position to start with (inclusive)
      limit - Buffer limit, where filling ends (exclusive)
      b - value
    • fill

      public static void fill(ByteBuffer byteBuffer, byte b)
      Fill the ByteBuffer with the specific byte value. ByteBuffer's position won't be changed.
      Parameters:
      byteBuffer - ByteBuffer
      b - value
    • fill

      public static void fill(ByteBuffer byteBuffer, int position, int limit, byte b)
      Fill the ByteBuffer's part [position, limit) with the specific byte value starting from the ByteBuffer's position won't be changed.
      Parameters:
      byteBuffer - ByteBuffer
      position - ByteBuffer position to start with (inclusive)
      limit - Buffer limit, where filling ends (exclusive)
      b - value
    • cloneBuffer

      public static Buffer cloneBuffer(Buffer srcBuffer)
      Clones the source Buffer. The method returns a new Buffer instance, which has the same content. Please note, source and result Buffers have the same content, but it is *not* shared, so the following content changes in one of the Buffers won't be visible in another one.
      Parameters:
      srcBuffer - the source Buffer.
      Returns:
      the cloned Buffer.
    • cloneBuffer

      public static Buffer cloneBuffer(Buffer srcBuffer, int position, int limit)
      Clones the source Buffer. The method returns a new Buffer instance, which has the same content. Please note, source and result Buffers have the same content, but it is *not* shared, so the following content changes in one of the Buffers won't be visible in another one.
      Parameters:
      srcBuffer - the source Buffer.
      position - the start position in the srcBuffer
      limit - the end position in the srcBuffer
      Returns:
      the cloned Buffer.
    • readFromFileChannel

      public static long readFromFileChannel(FileChannel fileChannel, Buffer buffer) throws IOException
      Reads data from the FileChannel into the Buffer.
      Parameters:
      fileChannel - the FileChannel to read data from.
      buffer - the destination Buffer.
      Returns:
      the number of bytes read, or -1 if the end of file is reached.
      Throws:
      IOExceptionif - an error occurs reading the FileChannel.
      IOException
    • writeToFileChannel

      public static long writeToFileChannel(FileChannel fileChannel, Buffer buffer) throws IOException
      Writes data from the Buffer into the FileChannel.
      Parameters:
      fileChannel - the FileChannel to write data to.
      buffer - the source Buffer.
      Returns:
      the number of bytes written, possibly zero.
      Throws:
      IOExceptionif - an error occurs writing to the FileChannel.
      IOException
    • toStringContent

      public String toStringContent(Buffer buffer, int headBytesCount, int tailBytesCount)
      Returns the Buffer's String representation in a form: Buffer#toString() + "[" + <head-chunk> + "..." + <tail-chunk> + "]" For example:
       HeapBuffer (1781633478) [pos=0 lim=285 cap=285][abcde...xyz]
       
      Parameters:
      buffer - the Buffer, could be null
      headBytesCount - the number of heading bytes to include (larger or equal to 0)
      tailBytesCount - the number of tailing bytes to include (larger or equal to 0)
      Returns:
      the Buffer's String representation, or null, if the Buffer is null
    • toStringContent

      public String toStringContent(Buffer buffer, int headBytesCount, int tailBytesCount, Charset charset)
      Returns the Buffer's String representation in a form: Buffer#toString() + "[" + <head-chunk> + "..." + <tail-chunk> + "]" For example:
       HeapBuffer (1781633478) [pos=0 lim=285 cap=285][abcde...xyz]
       
      Parameters:
      buffer - the Buffer, could be null
      headBytesCount - the number of heading bytes to include (larger or equal to 0)
      tailBytesCount - the number of tailing bytes to include (larger or equal to 0)
      charset - Charset, if null the Charset.defaultCharset() will be used
      Returns:
      the Buffer's String representation, or null, if the Buffer is null
    • dumpBuffer

      public static void dumpBuffer(Appendable appendable, Buffer buffer)
      Generates a hex dump of the provided Buffer.
      Parameters:
      appendable - the Appendable to write the hex dump to.
      buffer - the Buffer to dump.
      Since:
      2.3.23