Class ChannelOutboundBuffer


  • public final class ChannelOutboundBuffer
    extends Object
    (Transport implementors only) an internal data structure used by AbstractChannel to store its pending outbound write requests.

    All methods must be called by a transport implementation from an I/O thread, except the following ones:

    • Method Detail

      • addFlush

        public void addFlush()
        Add a flush to this ChannelOutboundBuffer. This means all previous added messages are marked as flushed and so you will be able to handle them.
      • current

        public Object current()
        Return the current message to write or null if nothing was flushed before and so is ready to be written.
      • currentProgress

        public long currentProgress()
        Return the current message flush progress.
        Returns:
        0 if nothing was flushed before for the current message or there is no current message
      • progress

        public void progress​(long amount)
        Notify the Promise of the current message about writing progress.
      • remove

        public boolean remove()
        Will remove the current message, mark its Promise as success and return true. If no flushed message exists at the time this method is called it will return false to signal that no more messages are ready to be handled.
      • remove

        public boolean remove​(Throwable cause)
        Will remove the current message, mark its Promise as failure using the given Throwable and return true. If no flushed message exists at the time this method is called it will return false to signal that no more messages are ready to be handled.
      • removeBytes

        public void removeBytes​(long writtenBytes)
        Removes the fully written entries and update the reader index of the partially written entry. This operation assumes all messages in this buffer are either Buffers or Buffers.
      • nioBuffers

        public ByteBuffer[] nioBuffers​(int maxCount,
                                       long maxBytes)
        Returns an array of direct NIO buffers if the currently pending messages are made of Buffer only. nioBufferCount() and nioBufferSize() will return the number of NIO buffers in the returned array and the total number of readable bytes of the NIO buffers respectively.

        Note that the returned array is reused and thus should not escape AbstractChannel.doWrite(ChannelOutboundBuffer).

        Parameters:
        maxCount - The maximum amount of buffers that will be added to the return value.
        maxBytes - A hint toward the maximum number of bytes to include as part of the return value. Note that this value maybe exceeded because we make a best effort to include at least 1 ByteBuffer in the return value to ensure write progress is made.
      • nioBufferCount

        public int nioBufferCount()
        Returns the number of ByteBuffer that can be written out of the ByteBuffer array that was obtained via nioBuffers(). This method MUST be called after nioBuffers() was called.
      • nioBufferSize

        public long nioBufferSize()
        Returns the number of bytes that can be written out of the ByteBuffer array that was obtained via nioBuffers(). This method MUST be called after nioBuffers() was called.
      • isEmpty

        public boolean isEmpty()
        Returns true if there are flushed messages in this ChannelOutboundBuffer or false otherwise.
      • totalPendingWriteBytes

        public long totalPendingWriteBytes()