Class CompositeChannelBuffer

java.lang.Object
org.jboss.netty.buffer.AbstractChannelBuffer
org.jboss.netty.buffer.CompositeChannelBuffer
All Implemented Interfaces:
Comparable<ChannelBuffer>, ChannelBuffer

public class CompositeChannelBuffer extends AbstractChannelBuffer
A virtual buffer which shows multiple buffers as a single merged buffer. It is recommended to use ChannelBuffers.wrappedBuffer(ChannelBuffer...) instead of calling the constructor explicitly.
  • Field Details

    • order

      private final ByteOrder order
    • components

      private ChannelBuffer[] components
    • indices

      private int[] indices
    • lastAccessedComponentId

      private int lastAccessedComponentId
    • gathering

      private final boolean gathering
  • Constructor Details

  • Method Details

    • useGathering

      public boolean useGathering()
      Return true if gathering writes / reads should be used for this CompositeChannelBuffer
    • decompose

      public List<ChannelBuffer> decompose(int index, int length)
      Same with slice(int, int) except that this method returns a list.
    • setComponents

      private void setComponents(List<ChannelBuffer> newComponents)
      Setup this ChannelBuffer from the list
    • factory

      public ChannelBufferFactory factory()
      Description copied from interface: ChannelBuffer
      Returns the factory which creates a ChannelBuffer whose type and default ByteOrder are same with this buffer.
    • order

      public ByteOrder order()
      Description copied from interface: ChannelBuffer
      Returns the endianness of this buffer.
    • isDirect

      public boolean isDirect()
      Description copied from interface: ChannelBuffer
      Returns true if and only if this buffer is backed by an NIO direct buffer.
    • hasArray

      public boolean hasArray()
      Description copied from interface: ChannelBuffer
      Returns true if and only if this buffer has a backing byte array. If this method returns true, you can safely call ChannelBuffer.array() and ChannelBuffer.arrayOffset().
    • array

      public byte[] array()
      Description copied from interface: ChannelBuffer
      Returns the backing byte array of this buffer.
    • arrayOffset

      public int arrayOffset()
      Description copied from interface: ChannelBuffer
      Returns the offset of the first byte within the backing byte array of this buffer.
    • capacity

      public int capacity()
      Description copied from interface: ChannelBuffer
      Returns the number of bytes (octets) this buffer can contain.
    • numComponents

      public int numComponents()
    • getByte

      public byte getByte(int index)
      Description copied from interface: ChannelBuffer
      Gets a byte at the specified absolute index in this buffer. This method does not modify readerIndex or writerIndex of this buffer.
    • getShort

      public short getShort(int index)
      Description copied from interface: ChannelBuffer
      Gets a 16-bit short integer at the specified absolute index in this buffer. This method does not modify readerIndex or writerIndex of this buffer.
    • getUnsignedMedium

      public int getUnsignedMedium(int index)
      Description copied from interface: ChannelBuffer
      Gets an unsigned 24-bit medium integer at the specified absolute index in this buffer. This method does not modify readerIndex or writerIndex of this buffer.
    • getInt

      public int getInt(int index)
      Description copied from interface: ChannelBuffer
      Gets a 32-bit integer at the specified absolute index in this buffer. This method does not modify readerIndex or writerIndex of this buffer.
    • getLong

      public long getLong(int index)
      Description copied from interface: ChannelBuffer
      Gets a 64-bit long integer at the specified absolute index in this buffer. This method does not modify readerIndex or writerIndex of this buffer.
    • getBytes

      public void getBytes(int index, byte[] dst, int dstIndex, int length)
      Description copied from interface: ChannelBuffer
      Transfers this buffer's data to the specified destination starting at the specified absolute index. This method does not modify readerIndex or writerIndex of this buffer.
      Parameters:
      dstIndex - the first index of the destination
      length - the number of bytes to transfer
    • getBytes

      public void getBytes(int index, ByteBuffer dst)
      Description copied from interface: ChannelBuffer
      Transfers this buffer's data to the specified destination starting at the specified absolute index until the destination's position reaches its limit. This method does not modify readerIndex or writerIndex of this buffer while the destination's position will be increased.
    • getBytes

      public void getBytes(int index, ChannelBuffer dst, int dstIndex, int length)
      Description copied from interface: ChannelBuffer
      Transfers this buffer's data to the specified destination starting at the specified absolute index. This method does not modify readerIndex or writerIndex of both the source (i.e. this) and the destination.
      Parameters:
      dstIndex - the first index of the destination
      length - the number of bytes to transfer
    • getBytes

      public int getBytes(int index, GatheringByteChannel out, int length) throws IOException
      Description copied from interface: ChannelBuffer
      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.
      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 void getBytes(int index, OutputStream out, int length) throws IOException
      Description copied from interface: ChannelBuffer
      Transfers this buffer's data to the specified stream starting at the specified absolute index. This method does not modify readerIndex or writerIndex of this buffer.
      Parameters:
      length - the number of bytes to transfer
      Throws:
      IOException - if the specified stream threw an exception during I/O
    • setByte

      public void setByte(int index, int value)
      Description copied from interface: ChannelBuffer
      Sets the specified byte at the specified absolute index in this buffer. The 24 high-order bits of the specified value are ignored. This method does not modify readerIndex or writerIndex of this buffer.
    • setShort

      public void setShort(int index, int value)
      Description copied from interface: ChannelBuffer
      Sets the specified 16-bit short integer at the specified absolute index in this buffer. The 16 high-order bits of the specified value are ignored. This method does not modify readerIndex or writerIndex of this buffer.
    • setMedium

      public void setMedium(int index, int value)
      Description copied from interface: ChannelBuffer
      Sets the specified 24-bit medium integer at the specified absolute index in this buffer. Please note that the most significant byte is ignored in the specified value. This method does not modify readerIndex or writerIndex of this buffer.
    • setInt

      public void setInt(int index, int value)
      Description copied from interface: ChannelBuffer
      Sets the specified 32-bit integer at the specified absolute index in this buffer. This method does not modify readerIndex or writerIndex of this buffer.
    • setLong

      public void setLong(int index, long value)
      Description copied from interface: ChannelBuffer
      Sets the specified 64-bit long integer at the specified absolute index in this buffer. This method does not modify readerIndex or writerIndex of this buffer.
    • setBytes

      public void setBytes(int index, byte[] src, int srcIndex, int length)
      Description copied from interface: ChannelBuffer
      Transfers the specified source array's data to this buffer starting at the specified absolute index. This method does not modify readerIndex or writerIndex of this buffer.
    • setBytes

      public void setBytes(int index, ByteBuffer src)
      Description copied from interface: ChannelBuffer
      Transfers the specified source buffer's data to this buffer starting at the specified absolute index until the source buffer's position reaches its limit. This method does not modify readerIndex or writerIndex of this buffer.
    • setBytes

      public void setBytes(int index, ChannelBuffer src, int srcIndex, int length)
      Description copied from interface: ChannelBuffer
      Transfers the specified source buffer's data to this buffer starting at the specified absolute index. This method does not modify readerIndex or writerIndex of both the source (i.e. this) and the destination.
      Parameters:
      srcIndex - the first index of the source
      length - the number of bytes to transfer
    • setBytes

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

      public int setBytes(int index, ScatteringByteChannel in, int length) throws IOException
      Description copied from interface: ChannelBuffer
      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.
      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.
      Throws:
      IOException - if the specified channel threw an exception during I/O
    • duplicate

      public ChannelBuffer duplicate()
      Description copied from interface: ChannelBuffer
      Returns a 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.
    • copy

      public ChannelBuffer copy(int index, int length)
      Description copied from interface: ChannelBuffer
      Returns a copy of this buffer's sub-region. Modifying the content of the returned buffer or this buffer does not affect each other at all. This method does not modify readerIndex or writerIndex of this buffer.
    • copyTo

      private void copyTo(int index, int length, int componentId, ChannelBuffer dst)
    • getBuffer

      public ChannelBuffer getBuffer(int index)
      Returns the ChannelBuffer portion of this CompositeChannelBuffer that contains the specified index. This is an expert method!

      Please note that since a CompositeChannelBuffer is made up of multiple ChannelBuffers, this does not return the full buffer. Instead, it only returns a portion of the composite buffer where the index is located

      Parameters:
      index - The index to search for and include in the returned ChannelBuffer
      Returns:
      The ChannelBuffer that contains the specified index
      Throws:
      IndexOutOfBoundsException - when the specified index is less than zero, or larger than capacity()
    • slice

      public ChannelBuffer slice(int index, int length)
      Description copied from interface: ChannelBuffer
      Returns a 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.
    • toByteBuffer

      public ByteBuffer toByteBuffer(int index, int length)
      Description copied from interface: ChannelBuffer
      Converts this buffer's sub-region into a NIO buffer. The returned buffer might or might not share the content with this buffer, while they have separate indexes and marks. This method does not modify readerIndex or writerIndex of this buffer.
    • toByteBuffers

      public ByteBuffer[] toByteBuffers(int index, int length)
      Description copied from interface: ChannelBuffer
      Converts this buffer's sub-region into an array of NIO buffers. The returned buffers might or might not share the content with this buffer, while they have separate indexes and marks. This method does not modify readerIndex or writerIndex of this buffer.
      Specified by:
      toByteBuffers in interface ChannelBuffer
      Overrides:
      toByteBuffers in class AbstractChannelBuffer
    • componentId

      private int componentId(int index)
    • discardReadBytes

      public void discardReadBytes()
      Description copied from interface: ChannelBuffer
      Discards the bytes between the 0th index and readerIndex. It moves the bytes between readerIndex and writerIndex to the 0th index, and sets readerIndex and writerIndex to 0 and oldWriterIndex - oldReaderIndex respectively.

      Please refer to the class documentation for more detailed explanation.

      Specified by:
      discardReadBytes in interface ChannelBuffer
      Overrides:
      discardReadBytes in class AbstractChannelBuffer
    • toString

      public String toString()
      Description copied from interface: ChannelBuffer
      Returns the string representation of this buffer. This method does not necessarily return the whole content of the buffer but returns the values of the key properties such as ChannelBuffer.readerIndex(), ChannelBuffer.writerIndex() and ChannelBuffer.capacity().
      Specified by:
      toString in interface ChannelBuffer
      Overrides:
      toString in class AbstractChannelBuffer