Class EmptyChannelBuffer

All Implemented Interfaces:
Comparable<ChannelBuffer>, ChannelBuffer

public class EmptyChannelBuffer extends BigEndianHeapChannelBuffer
An immutable empty buffer implementation. Typically used as a singleton via ChannelBuffers.EMPTY_BUFFER and returned by ChannelBuffers.buffer(int) etc when an empty buffer is requested.

Note: For backwards compatibility, this class extends BigEndianHeapChannelBuffer. However, it never makes any writes to the reader and writer indices, which avoids contention when the singleton instance is used concurrently.

  • Field Details

    • BUFFER

      private static final byte[] BUFFER
  • Constructor Details

    • EmptyChannelBuffer

      EmptyChannelBuffer()
  • Method Details

    • clear

      public void clear()
      Description copied from interface: ChannelBuffer
      Sets the readerIndex and writerIndex of this buffer to 0. This method is identical to setIndex(0, 0).

      Please note that the behavior of this method is different from that of NIO buffer, which sets the limit to the capacity of the buffer.

      Specified by:
      clear in interface ChannelBuffer
      Overrides:
      clear in class AbstractChannelBuffer
    • readerIndex

      public void readerIndex(int readerIndex)
      Description copied from interface: ChannelBuffer
      Sets the readerIndex of this buffer.
      Specified by:
      readerIndex in interface ChannelBuffer
      Overrides:
      readerIndex in class AbstractChannelBuffer
    • writerIndex

      public void writerIndex(int writerIndex)
      Description copied from interface: ChannelBuffer
      Sets the writerIndex of this buffer.
      Specified by:
      writerIndex in interface ChannelBuffer
      Overrides:
      writerIndex in class AbstractChannelBuffer
    • setIndex

      public void setIndex(int readerIndex, int writerIndex)
      Description copied from interface: ChannelBuffer
      Sets the readerIndex and writerIndex of this buffer in one shot. This method is useful when you have to worry about the invocation order of ChannelBuffer.readerIndex(int) and ChannelBuffer.writerIndex(int) methods. For example, the following code will fail:
       // Create a buffer whose readerIndex, writerIndex and capacity are
       // 0, 0 and 8 respectively.
       ChannelBuffer buf = ChannelBuffers.buffer(8);
      
       // IndexOutOfBoundsException is thrown because the specified
       // readerIndex (2) cannot be greater than the current writerIndex (0).
       buf.readerIndex(2);
       buf.writerIndex(4);
       
      The following code will also fail:
       // Create a buffer whose readerIndex, writerIndex and capacity are
       // 0, 8 and 8 respectively.
       ChannelBuffer buf = ChannelBuffers.wrappedBuffer(new byte[8]);
      
       // readerIndex becomes 8.
       buf.readLong();
      
       // IndexOutOfBoundsException is thrown because the specified
       // writerIndex (4) cannot be less than the current readerIndex (8).
       buf.writerIndex(4);
       buf.readerIndex(2);
       
      By contrast, this method guarantees that it never throws an IndexOutOfBoundsException as long as the specified indexes meet basic constraints, regardless what the current index values of the buffer are:
       // No matter what the current state of the buffer is, the following
       // call always succeeds as long as the capacity of the buffer is not
       // less than 4.
       buf.setIndex(2, 4);
       
      Specified by:
      setIndex in interface ChannelBuffer
      Overrides:
      setIndex in class AbstractChannelBuffer
    • markReaderIndex

      public void markReaderIndex()
      Description copied from interface: ChannelBuffer
      Marks the current readerIndex in this buffer. You can reposition the current readerIndex to the marked readerIndex by calling ChannelBuffer.resetReaderIndex(). The initial value of the marked readerIndex is 0.
      Specified by:
      markReaderIndex in interface ChannelBuffer
      Overrides:
      markReaderIndex in class AbstractChannelBuffer
    • resetReaderIndex

      public void resetReaderIndex()
      Description copied from interface: ChannelBuffer
      Repositions the current readerIndex to the marked readerIndex in this buffer.
      Specified by:
      resetReaderIndex in interface ChannelBuffer
      Overrides:
      resetReaderIndex in class AbstractChannelBuffer
    • markWriterIndex

      public void markWriterIndex()
      Description copied from interface: ChannelBuffer
      Marks the current writerIndex in this buffer. You can reposition the current writerIndex to the marked writerIndex by calling ChannelBuffer.resetWriterIndex(). The initial value of the marked writerIndex is 0.
      Specified by:
      markWriterIndex in interface ChannelBuffer
      Overrides:
      markWriterIndex in class AbstractChannelBuffer
    • resetWriterIndex

      public void resetWriterIndex()
      Description copied from interface: ChannelBuffer
      Repositions the current writerIndex to the marked writerIndex in this buffer.
      Specified by:
      resetWriterIndex in interface ChannelBuffer
      Overrides:
      resetWriterIndex in class AbstractChannelBuffer
    • 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
    • readBytes

      public ChannelBuffer readBytes(int length)
      Description copied from interface: ChannelBuffer
      Transfers this buffer's data to a newly created buffer starting at the current readerIndex and increases the readerIndex by the number of the transferred bytes (= length). The returned buffer's readerIndex and writerIndex are 0 and length respectively.
      Specified by:
      readBytes in interface ChannelBuffer
      Overrides:
      readBytes in class AbstractChannelBuffer
      Parameters:
      length - the number of bytes to transfer
      Returns:
      the newly created buffer which contains the transferred bytes
    • readSlice

      public ChannelBuffer readSlice(int length)
      Description copied from interface: ChannelBuffer
      Returns a new slice of this buffer's sub-region starting at the current readerIndex and increases the readerIndex by the size of the new slice (= length).
      Specified by:
      readSlice in interface ChannelBuffer
      Overrides:
      readSlice in class AbstractChannelBuffer
      Parameters:
      length - the size of the new slice
      Returns:
      the newly created slice
    • readBytes

      public void readBytes(byte[] dst, int dstIndex, int length)
      Description copied from interface: ChannelBuffer
      Transfers this buffer's data to the specified destination starting at the current readerIndex and increases the readerIndex by the number of the transferred bytes (= length).
      Specified by:
      readBytes in interface ChannelBuffer
      Overrides:
      readBytes in class AbstractChannelBuffer
      Parameters:
      dstIndex - the first index of the destination
      length - the number of bytes to transfer
    • readBytes

      public void readBytes(byte[] dst)
      Description copied from interface: ChannelBuffer
      Transfers this buffer's data to the specified destination starting at the current readerIndex and increases the readerIndex by the number of the transferred bytes (= dst.length).
      Specified by:
      readBytes in interface ChannelBuffer
      Overrides:
      readBytes in class AbstractChannelBuffer
    • readBytes

      public void readBytes(ChannelBuffer dst)
      Description copied from interface: ChannelBuffer
      Transfers this buffer's data to the specified destination starting at the current readerIndex until the destination becomes non-writable, and increases the readerIndex by the number of the transferred bytes. This method is basically same with ChannelBuffer.readBytes(ChannelBuffer, int, int), except that this method increases the writerIndex of the destination by the number of the transferred bytes while ChannelBuffer.readBytes(ChannelBuffer, int, int) does not.
      Specified by:
      readBytes in interface ChannelBuffer
      Overrides:
      readBytes in class AbstractChannelBuffer
    • readBytes

      public void readBytes(ChannelBuffer dst, int length)
      Description copied from interface: ChannelBuffer
      Transfers this buffer's data to the specified destination starting at the current readerIndex and increases the readerIndex by the number of the transferred bytes (= length). This method is basically same with ChannelBuffer.readBytes(ChannelBuffer, int, int), except that this method increases the writerIndex of the destination by the number of the transferred bytes (= length) while ChannelBuffer.readBytes(ChannelBuffer, int, int) does not.
      Specified by:
      readBytes in interface ChannelBuffer
      Overrides:
      readBytes in class AbstractChannelBuffer
    • readBytes

      public void readBytes(ChannelBuffer dst, int dstIndex, int length)
      Description copied from interface: ChannelBuffer
      Transfers this buffer's data to the specified destination starting at the current readerIndex and increases the readerIndex by the number of the transferred bytes (= length).
      Specified by:
      readBytes in interface ChannelBuffer
      Overrides:
      readBytes in class AbstractChannelBuffer
      Parameters:
      dstIndex - the first index of the destination
      length - the number of bytes to transfer
    • readBytes

      public void readBytes(ByteBuffer dst)
      Description copied from interface: ChannelBuffer
      Transfers this buffer's data to the specified destination starting at the current readerIndex until the destination's position reaches its limit, and increases the readerIndex by the number of the transferred bytes.
      Specified by:
      readBytes in interface ChannelBuffer
      Overrides:
      readBytes in class AbstractChannelBuffer
    • readBytes

      public int readBytes(GatheringByteChannel out, int length) throws IOException
      Description copied from interface: ChannelBuffer
      Transfers this buffer's data to the specified stream starting at the current readerIndex.
      Specified by:
      readBytes in interface ChannelBuffer
      Overrides:
      readBytes in class AbstractChannelBuffer
      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 void readBytes(OutputStream out, int length) throws IOException
      Description copied from interface: ChannelBuffer
      Transfers this buffer's data to the specified stream starting at the current readerIndex.
      Specified by:
      readBytes in interface ChannelBuffer
      Overrides:
      readBytes in class AbstractChannelBuffer
      Parameters:
      length - the number of bytes to transfer
      Throws:
      IOException - if the specified stream threw an exception during I/O
    • skipBytes

      public void skipBytes(int length)
      Description copied from interface: ChannelBuffer
      Increases the current readerIndex by the specified length in this buffer.
      Specified by:
      skipBytes in interface ChannelBuffer
      Overrides:
      skipBytes in class AbstractChannelBuffer
    • writeBytes

      public void writeBytes(byte[] src, int srcIndex, int length)
      Description copied from interface: ChannelBuffer
      Transfers the specified source array's data to this buffer starting at the current writerIndex and increases the writerIndex by the number of the transferred bytes (= length).
      Specified by:
      writeBytes in interface ChannelBuffer
      Overrides:
      writeBytes in class AbstractChannelBuffer
      Parameters:
      srcIndex - the first index of the source
      length - the number of bytes to transfer
    • writeBytes

      public void writeBytes(ChannelBuffer src, int length)
      Description copied from interface: ChannelBuffer
      Transfers the specified source buffer's data to this buffer starting at the current writerIndex and increases the writerIndex by the number of the transferred bytes (= length). This method is basically same with ChannelBuffer.writeBytes(ChannelBuffer, int, int), except that this method increases the readerIndex of the source buffer by the number of the transferred bytes (= length) while ChannelBuffer.writeBytes(ChannelBuffer, int, int) does not.
      Specified by:
      writeBytes in interface ChannelBuffer
      Overrides:
      writeBytes in class AbstractChannelBuffer
      Parameters:
      length - the number of bytes to transfer
    • writeBytes

      public void writeBytes(ChannelBuffer src, int srcIndex, int length)
      Description copied from interface: ChannelBuffer
      Transfers the specified source buffer's data to this buffer starting at the current writerIndex and increases the writerIndex by the number of the transferred bytes (= length).
      Specified by:
      writeBytes in interface ChannelBuffer
      Overrides:
      writeBytes in class AbstractChannelBuffer
      Parameters:
      srcIndex - the first index of the source
      length - the number of bytes to transfer
    • writeBytes

      public void writeBytes(ByteBuffer src)
      Description copied from interface: ChannelBuffer
      Transfers the specified source buffer's data to this buffer starting at the current writerIndex until the source buffer's position reaches its limit, and increases the writerIndex by the number of the transferred bytes.
      Specified by:
      writeBytes in interface ChannelBuffer
      Overrides:
      writeBytes in class AbstractChannelBuffer
    • writeBytes

      public int writeBytes(InputStream in, int length) throws IOException
      Description copied from interface: ChannelBuffer
      Transfers the content of the specified stream to this buffer starting at the current writerIndex and increases the writerIndex by the number of the transferred bytes.
      Specified by:
      writeBytes in interface ChannelBuffer
      Overrides:
      writeBytes in class AbstractChannelBuffer
      Parameters:
      length - the number of bytes to transfer
      Returns:
      the actual number of bytes read in from the specified stream
      Throws:
      IOException - if the specified stream threw an exception during I/O
    • writeBytes

      public int writeBytes(ScatteringByteChannel in, int length) throws IOException
      Description copied from interface: ChannelBuffer
      Transfers the content of the specified channel to this buffer starting at the current writerIndex and increases the writerIndex by the number of the transferred bytes.
      Specified by:
      writeBytes in interface ChannelBuffer
      Overrides:
      writeBytes in class AbstractChannelBuffer
      Parameters:
      length - the maximum number of bytes to transfer
      Returns:
      the actual number of bytes read in from the specified channel
      Throws:
      IOException - if the specified channel threw an exception during I/O
    • writeZero

      public void writeZero(int length)
      Description copied from interface: ChannelBuffer
      Fills this buffer with NUL (0x00) starting at the current writerIndex and increases the writerIndex by the specified length.
      Specified by:
      writeZero in interface ChannelBuffer
      Overrides:
      writeZero in class AbstractChannelBuffer
      Parameters:
      length - the number of NULs to write to the buffer
    • checkWritableBytes

      private void checkWritableBytes(int length)
      Throws an IndexOutOfBoundsException the length is not 0.
    • checkReadableBytes

      protected void checkReadableBytes(int length)
      Throws an IndexOutOfBoundsException the length is not 0.
      Overrides:
      checkReadableBytes in class AbstractChannelBuffer