Class PooledByteBuf<T>

All Implemented Interfaces:
ByteBufConvertible, ReferenceCounted, Comparable<ByteBuf>
Direct Known Subclasses:
PooledDirectByteBuf, PooledHeapByteBuf, PooledUnsafeDirectByteBuf

abstract class PooledByteBuf<T> extends AbstractReferenceCountedByteBuf
  • Field Details

  • Constructor Details

  • Method Details

    • init

      void init(PoolChunk<T> chunk, ByteBuffer nioBuffer, long handle, int offset, int length, int maxLength, PoolThreadCache cache)
    • initUnpooled

      void initUnpooled(PoolChunk<T> chunk, int length)
    • init0

      private void init0(PoolChunk<T> chunk, ByteBuffer nioBuffer, long handle, int offset, int length, int maxLength, PoolThreadCache cache)
    • reuse

      final void reuse(int maxCapacity)
      Method must be called before reuse this PooledByteBufAllocator
    • capacity

      public final int capacity()
      Description copied from class: ByteBuf
      Returns the number of bytes (octets) this buffer can contain.
      Specified by:
      capacity in class ByteBuf
    • maxFastWritableBytes

      public int maxFastWritableBytes()
      Description copied from class: ByteBuf
      Returns the maximum number of bytes which can be written for certain without involving an internal reallocation or data-copy. The returned value will be ≥ ByteBuf.writableBytes() and ≤ ByteBuf.maxWritableBytes().
      Overrides:
      maxFastWritableBytes in class ByteBuf
    • capacity

      public final ByteBuf capacity(int newCapacity)
      Description copied from class: ByteBuf
      Adjusts the capacity of this buffer. If the newCapacity is less than the current capacity, the content of this buffer is truncated. If the newCapacity is greater than the current capacity, the buffer is appended with unspecified data whose length is (newCapacity - currentCapacity).
      Specified by:
      capacity in class ByteBuf
    • alloc

      public final ByteBufAllocator alloc()
      Description copied from class: ByteBuf
      Returns the ByteBufAllocator which created this buffer.
      Specified by:
      alloc in class ByteBuf
    • order

      public final ByteOrder order()
      Description copied from class: ByteBuf
      Returns the endianness of this buffer.
      Specified by:
      order in class ByteBuf
    • unwrap

      public final ByteBuf unwrap()
      Description copied from class: ByteBuf
      Return the underlying buffer instance if this buffer is a wrapper of another buffer.
      Specified by:
      unwrap in class ByteBuf
      Returns:
      null if this buffer is not a wrapper
    • retainedDuplicate

      public final ByteBuf retainedDuplicate()
      Description copied from class: ByteBuf
      Returns a retained buffer which shares the whole region of this buffer. Modifying the content of the returned buffer or this buffer affects each other's content while they maintain separate indexes and marks. This method is identical to buf.slice(0, buf.capacity()). This method does not modify readerIndex or writerIndex of this buffer.

      Note that this method returns a retained buffer unlike ByteBuf.slice(int, int). This method behaves similarly to duplicate().retain() except that this method may return a buffer implementation that produces less garbage.

      Overrides:
      retainedDuplicate in class AbstractByteBuf
    • retainedSlice

      public final ByteBuf retainedSlice()
      Description copied from class: ByteBuf
      Returns a retained slice of this buffer's readable bytes. Modifying the content of the returned buffer or this buffer affects each other's content while they maintain separate indexes and marks. This method is identical to buf.slice(buf.readerIndex(), buf.readableBytes()). This method does not modify readerIndex or writerIndex of this buffer.

      Note that this method returns a retained buffer unlike ByteBuf.slice(). This method behaves similarly to slice().retain() except that this method may return a buffer implementation that produces less garbage.

      Overrides:
      retainedSlice in class AbstractByteBuf
    • retainedSlice

      public final ByteBuf retainedSlice(int index, int length)
      Description copied from class: ByteBuf
      Returns a retained slice of this buffer's sub-region. Modifying the content of the returned buffer or this buffer affects each other's content while they maintain separate indexes and marks. This method does not modify readerIndex or writerIndex of this buffer.

      Note that this method returns a retained buffer unlike ByteBuf.slice(int, int). This method behaves similarly to slice(...).retain() except that this method may return a buffer implementation that produces less garbage.

      Overrides:
      retainedSlice in class AbstractByteBuf
    • internalNioBuffer

      protected final ByteBuffer internalNioBuffer()
    • newInternalNioBuffer

      protected abstract ByteBuffer newInternalNioBuffer(T memory)
    • deallocate

      protected final void deallocate()
      Description copied from class: AbstractReferenceCountedByteBuf
      Specified by:
      deallocate in class AbstractReferenceCountedByteBuf
    • idx

      protected final int idx(int index)
    • _internalNioBuffer

      final ByteBuffer _internalNioBuffer(int index, int length, boolean duplicate)
    • duplicateInternalNioBuffer

      ByteBuffer duplicateInternalNioBuffer(int index, int length)
    • internalNioBuffer

      public final ByteBuffer internalNioBuffer(int index, int length)
      Description copied from class: ByteBuf
      Internal use only: Exposes the internal NIO buffer.
      Specified by:
      internalNioBuffer in class ByteBuf
    • nioBufferCount

      public final int nioBufferCount()
      Description copied from class: ByteBuf
      Returns the maximum number of NIO ByteBuffers that consist this buffer. Note that ByteBuf.nioBuffers() or ByteBuf.nioBuffers(int, int) might return a less number of ByteBuffers.
      Specified by:
      nioBufferCount in class ByteBuf
      Returns:
      -1 if this buffer has no underlying ByteBuffer. the number of the underlying ByteBuffers if this buffer has at least one underlying ByteBuffer. Note that this method does not return 0 to avoid confusion.
      See Also:
    • nioBuffer

      public final ByteBuffer nioBuffer(int index, int length)
      Description copied from class: ByteBuf
      Exposes this buffer's sub-region as an NIO ByteBuffer. The returned buffer either share or contains the copied content of this buffer, while changing the position and limit of the returned NIO buffer does not affect the indexes and marks of this buffer. This method does not modify readerIndex or writerIndex of this buffer. Please note that the returned NIO buffer will not see the changes of this buffer if this buffer is a dynamic buffer and it adjusted its capacity.
      Specified by:
      nioBuffer in class ByteBuf
      See Also:
    • nioBuffers

      public final ByteBuffer[] nioBuffers(int index, int length)
      Description copied from class: ByteBuf
      Exposes this buffer's bytes as an NIO ByteBuffer's for the specified index and length The returned buffer either share or contains the copied content of this buffer, while changing the position and limit of the returned NIO buffer does not affect the indexes and marks of this buffer. This method does not modify readerIndex or writerIndex of this buffer. Please note that the returned NIO buffer will not see the changes of this buffer if this buffer is a dynamic buffer and it adjusted its capacity.
      Specified by:
      nioBuffers in class ByteBuf
      See Also:
    • isContiguous

      public final boolean isContiguous()
      Description copied from class: ByteBuf
      Returns true if this ByteBuf implementation is backed by a single memory region. Composite buffer implementations must return false even if they currently hold ≤ 1 components. For buffers that return true, it's guaranteed that a successful call to ByteBuf.discardReadBytes() will increase the value of ByteBuf.maxFastWritableBytes() by the current readerIndex.

      This method will return false by default, and a false return value does not necessarily mean that the implementation is composite or that it is not backed by a single memory region.

      Overrides:
      isContiguous in class ByteBuf
    • getBytes

      public final int getBytes(int index, GatheringByteChannel out, int length) throws IOException
      Description copied from class: ByteBuf
      Transfers this buffer's data to the specified channel starting at the specified absolute index. This method does not modify readerIndex or writerIndex of this buffer.
      Specified by:
      getBytes in class ByteBuf
      Parameters:
      length - the maximum number of bytes to transfer
      Returns:
      the actual number of bytes written out to the specified channel
      Throws:
      IOException - if the specified channel threw an exception during I/O
    • readBytes

      public final int readBytes(GatheringByteChannel out, int length) throws IOException
      Description copied from class: ByteBuf
      Transfers this buffer's data to the specified stream starting at the current readerIndex.
      Overrides:
      readBytes in class AbstractByteBuf
      Parameters:
      length - the maximum number of bytes to transfer
      Returns:
      the actual number of bytes written out to the specified channel
      Throws:
      IOException - if the specified channel threw an exception during I/O
    • getBytes

      public final int getBytes(int index, FileChannel out, long position, int length) throws IOException
      Description copied from class: ByteBuf
      Transfers this buffer's data starting at the specified absolute index to the specified channel starting at the given file position. This method does not modify readerIndex or writerIndex of this buffer. This method does not modify the channel's position.
      Specified by:
      getBytes in class ByteBuf
      Parameters:
      position - the file position at which the transfer is to begin
      length - the maximum number of bytes to transfer
      Returns:
      the actual number of bytes written out to the specified channel
      Throws:
      IOException - if the specified channel threw an exception during I/O
    • readBytes

      public final int readBytes(FileChannel out, long position, int length) throws IOException
      Description copied from class: ByteBuf
      Transfers this buffer's data starting at the current readerIndex to the specified channel starting at the given file position. This method does not modify the channel's position.
      Overrides:
      readBytes in class AbstractByteBuf
      Parameters:
      position - the file position at which the transfer is to begin
      length - the maximum number of bytes to transfer
      Returns:
      the actual number of bytes written out to the specified channel
      Throws:
      IOException - if the specified channel threw an exception during I/O
    • setBytes

      public final int setBytes(int index, ScatteringByteChannel in, int length) throws IOException
      Description copied from class: ByteBuf
      Transfers the content of the specified source channel to this buffer starting at the specified absolute index. This method does not modify readerIndex or writerIndex of this buffer.
      Specified by:
      setBytes in class ByteBuf
      Parameters:
      length - the maximum number of bytes to transfer
      Returns:
      the actual number of bytes read in from the specified channel. -1 if the specified channel is closed or it reached EOF.
      Throws:
      IOException - if the specified channel threw an exception during I/O
    • setBytes

      public final int setBytes(int index, FileChannel in, long position, int length) throws IOException
      Description copied from class: ByteBuf
      Transfers the content of the specified source channel starting at the given file position to this buffer starting at the specified absolute index. This method does not modify readerIndex or writerIndex of this buffer. This method does not modify the channel's position.
      Specified by:
      setBytes in class ByteBuf
      Parameters:
      position - the file position at which the transfer is to begin
      length - the maximum number of bytes to transfer
      Returns:
      the actual number of bytes read in from the specified channel. -1 if the specified channel is closed or it reached EOF.
      Throws:
      IOException - if the specified channel threw an exception during I/O