Class CompositeReadableBuffer

  • All Implemented Interfaces:
    ReadableBuffer, java.io.Closeable, java.lang.AutoCloseable

    public class CompositeReadableBuffer
    extends AbstractReadableBuffer
    A ReadableBuffer that is composed of 0 or more ReadableBuffers. This provides a facade that allows multiple buffers to be treated as one.

    When a buffer is added to a composite, its life cycle is controlled by the composite. Once the composite has read past the end of a given buffer, that buffer is automatically closed and removed from the composite.

    • Constructor Detail

      • CompositeReadableBuffer

        public CompositeReadableBuffer​(int initialCapacity)
      • CompositeReadableBuffer

        public CompositeReadableBuffer()
    • Method Detail

      • addBuffer

        public void addBuffer​(ReadableBuffer buffer)
        Adds a new ReadableBuffer at the end of the buffer list. After a buffer is added, it is expected that this CompositeBuffer has complete ownership. Any attempt to modify the buffer (i.e. modifying the readable bytes) may result in corruption of the internal state of this CompositeBuffer.
      • enqueueBuffer

        private void enqueueBuffer​(ReadableBuffer buffer)
      • readableBytes

        public int readableBytes()
        Description copied from interface: ReadableBuffer
        Gets the current number of readable bytes remaining in this buffer.
      • readUnsignedByte

        public int readUnsignedByte()
        Description copied from interface: ReadableBuffer
        Reads the next unsigned byte from this buffer and increments the read position by 1.
      • skipBytes

        public void skipBytes​(int length)
        Description copied from interface: ReadableBuffer
        Increments the read position by the given length.
      • readBytes

        public void readBytes​(byte[] dest,
                              int destOffset,
                              int length)
        Description copied from interface: ReadableBuffer
        Reads length bytes from this buffer and writes them to the destination array. Increments the read position by length.
        Parameters:
        dest - the destination array to receive the bytes.
        destOffset - the starting offset in the destination array.
        length - the number of bytes to be copied.
      • readBytes

        public void readBytes​(java.nio.ByteBuffer dest)
        Description copied from interface: ReadableBuffer
        Reads from this buffer until the destination's position reaches its limit, and increases the read position by the number of the transferred bytes.
        Parameters:
        dest - the destination buffer to receive the bytes.
      • readBytes

        public void readBytes​(java.io.OutputStream dest,
                              int length)
                       throws java.io.IOException
        Description copied from interface: ReadableBuffer
        Reads length bytes from this buffer and writes them to the destination stream. Increments the read position by length. If the required bytes are not readable, throws IndexOutOfBoundsException.
        Parameters:
        dest - the destination stream to receive the bytes.
        length - the number of bytes to be copied.
        Throws:
        java.io.IOException - thrown if any error was encountered while writing to the stream.
      • readBytes

        public void readBytes​(CompositeReadableBuffer dest,
                              int length)
        Reads length bytes from this buffer and writes them to the destination buffer. Increments the read position by length. If the required bytes are not readable, throws IndexOutOfBoundsException.
        Parameters:
        dest - the destination buffer to receive the bytes.
        length - the number of bytes to be copied.
        Throws:
        java.lang.IndexOutOfBoundsException - if required bytes are not readable
      • readBytes

        public ReadableBuffer readBytes​(int length)
        Description copied from interface: ReadableBuffer
        Reads length bytes from this buffer and returns a new Buffer containing them. Some implementations may return a Buffer sharing the backing memory with this buffer to prevent copying. However, that means that the returned buffer may keep the (possibly much larger) backing memory in use even after this buffer is closed.
        Parameters:
        length - the number of bytes to contain in returned Buffer.
      • getByteBuffer

        @Nullable
        public java.nio.ByteBuffer getByteBuffer()
        Description copied from interface: ReadableBuffer
        Gets a ByteBuffer that contains some bytes of the content next to be read, or null if this buffer has been exhausted. The number of bytes contained in the returned buffer is implementation specific. The position of this buffer is unchanged after calling this method. The returned buffer's content should not be modified, but the position, limit, and mark may be changed. Operations for changing the position, limit, and mark of the returned buffer does not affect the position, limit, and mark of this buffer. Buffers returned by this method have independent position, limit and mark. This is an optional method, so callers should first check ReadableBuffer.byteBufferSupported().
        Specified by:
        getByteBuffer in interface ReadableBuffer
        Overrides:
        getByteBuffer in class AbstractReadableBuffer
      • close

        public void close()
        Description copied from interface: ReadableBuffer
        Closes this buffer and releases any resources.
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Specified by:
        close in interface ReadableBuffer
        Overrides:
        close in class AbstractReadableBuffer
      • advanceBufferIfNecessary

        private void advanceBufferIfNecessary()
        If the current buffer is exhausted, removes and closes it.
      • advanceBuffer

        private void advanceBuffer()
        Removes one buffer from the front and closes it.