Class AbstractChannelBuffer

java.lang.Object
org.apache.dubbo.remoting.buffer.AbstractChannelBuffer
All Implemented Interfaces:
Comparable<ChannelBuffer>, ChannelBuffer
Direct Known Subclasses:
ByteBufferBackedChannelBuffer, DynamicChannelBuffer, HeapChannelBuffer

public abstract class AbstractChannelBuffer extends Object implements ChannelBuffer
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    Sets the readerIndex and writerIndex of this buffer to 0.
    int
     
    Returns a copy of this buffer's readable bytes.
    void
    Discards the bytes between the 0th index and readerIndex.
    void
    ensureWritableBytes(int writableBytes)
    Makes sure the number of the writable bytes is equal to or greater than the specified value.
    boolean
    Determines if the content of the specified buffer is identical to the content of this array.
    void
    getBytes(int index, byte[] dst)
    Transfers this buffer's data to the specified destination starting at the specified absolute index.
    void
    getBytes(int index, ChannelBuffer dst)
    Transfers this buffer's data to the specified destination starting at the specified absolute index until the destination becomes non-writable.
    void
    getBytes(int index, ChannelBuffer dst, int length)
    Transfers this buffer's data to the specified destination starting at the specified absolute index.
    int
     
    void
    Marks the current readerIndex in this buffer.
    void
    Marks the current writerIndex in this buffer.
    boolean
    Returns true if and only if (this.writerIndex - this.readerIndex) is greater than 0.
    int
    Returns the number of readable bytes which is equal to (this.writerIndex - this.readerIndex).
    byte
    Gets a byte at the current readerIndex and increases the readerIndex by 1 in this buffer.
    void
    readBytes(byte[] dst)
    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).
    void
    readBytes(byte[] dst, int dstIndex, int length)
    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).
    readBytes(int length)
    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).
    void
    readBytes(OutputStream out, int length)
    Transfers this buffer's data to the specified stream starting at the current readerIndex.
    void
    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.
    void
    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.
    void
    readBytes(ChannelBuffer dst, int length)
    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).
    void
    readBytes(ChannelBuffer dst, int dstIndex, int length)
    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).
    int
    Returns the readerIndex of this buffer.
    void
    readerIndex(int readerIndex)
    Sets the readerIndex of this buffer.
    void
    Repositions the current readerIndex to the marked readerIndex in this buffer.
    void
    Marks the current writerIndex in this buffer.
    void
    setBytes(int index, byte[] src)
    Transfers the specified source array's data to this buffer starting at the specified absolute index.
    void
    setBytes(int index, ChannelBuffer src)
    Transfers the specified source buffer's data to this buffer starting at the specified absolute index until the source buffer becomes unreadable.
    void
    setBytes(int index, ChannelBuffer src, int length)
    Transfers the specified source buffer's data to this buffer starting at the specified absolute index.
    void
    setIndex(int readerIndex, int writerIndex)
    Sets the readerIndex and writerIndex of this buffer in one shot.
    void
    skipBytes(int length)
    Increases the current readerIndex by the specified length in this buffer.
    Converts this buffer's readable bytes into a NIO buffer.
     
    boolean
    Returns true if and only if (this.capacity - this.writerIndex) is greater than 0.
    int
    Returns the number of writable bytes which is equal to (this.capacity - this.writerIndex).
    void
    writeByte(int value)
    Sets the specified byte at the current writerIndex and increases the writerIndex by 1 in this buffer.
    void
    writeBytes(byte[] src)
    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 (= src.length).
    void
    writeBytes(byte[] src, int srcIndex, int length)
    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).
    int
    writeBytes(InputStream in, int length)
    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.
    void
    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.
    void
    Transfers the specified source buffer's data to this buffer starting at the current writerIndex until the source buffer becomes unreadable, and increases the writerIndex by the number of the transferred bytes.
    void
    writeBytes(ChannelBuffer src, int length)
    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).
    void
    writeBytes(ChannelBuffer src, int srcIndex, int length)
    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).
    int
    Returns the writerIndex of this buffer.
    void
    writerIndex(int writerIndex)
    Sets the writerIndex of this buffer.

    Methods inherited from class java.lang.Object

    getClass, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • AbstractChannelBuffer

      public AbstractChannelBuffer()
  • Method Details

    • readerIndex

      public int readerIndex()
      Description copied from interface: ChannelBuffer
      Returns the readerIndex of this buffer.
      Specified by:
      readerIndex in interface ChannelBuffer
    • readerIndex

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

      public int writerIndex()
      Description copied from interface: ChannelBuffer
      Returns the writerIndex of this buffer.
      Specified by:
      writerIndex in interface ChannelBuffer
    • writerIndex

      public void writerIndex(int writerIndex)
      Description copied from interface: ChannelBuffer
      Sets the writerIndex of this buffer.
      Specified by:
      writerIndex in interface ChannelBuffer
    • 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, ChannelBuffer.setIndex(int, int) 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
    • 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
    • readable

      public boolean readable()
      Description copied from interface: ChannelBuffer
      Returns true if and only if (this.writerIndex - this.readerIndex) is greater than 0.
      Specified by:
      readable in interface ChannelBuffer
    • writable

      public boolean writable()
      Description copied from interface: ChannelBuffer
      Returns true if and only if (this.capacity - this.writerIndex) is greater than 0.
      Specified by:
      writable in interface ChannelBuffer
    • readableBytes

      public int readableBytes()
      Description copied from interface: ChannelBuffer
      Returns the number of readable bytes which is equal to (this.writerIndex - this.readerIndex).
      Specified by:
      readableBytes in interface ChannelBuffer
    • writableBytes

      public int writableBytes()
      Description copied from interface: ChannelBuffer
      Returns the number of writable bytes which is equal to (this.capacity - this.writerIndex).
      Specified by:
      writableBytes in interface ChannelBuffer
    • 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
    • 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
    • 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
    • resetWriterIndex

      public void resetWriterIndex()
      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:
      resetWriterIndex in interface ChannelBuffer
    • 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
    • ensureWritableBytes

      public void ensureWritableBytes(int writableBytes)
      Description copied from interface: ChannelBuffer
      Makes sure the number of the writable bytes is equal to or greater than the specified value. If there is enough writable bytes in this buffer, this method returns with no side effect. Otherwise:
      • a non-dynamic buffer will throw an IndexOutOfBoundsException.
      • a dynamic buffer will expand its capacity so that the number of the writable bytes becomes equal to or greater than the specified value. The expansion involves the reallocation of the internal buffer and consequently memory copy.
      Specified by:
      ensureWritableBytes in interface ChannelBuffer
      Parameters:
      writableBytes - the expected minimum number of writable bytes
    • getBytes

      public void getBytes(int index, byte[] dst)
      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
      Specified by:
      getBytes in interface ChannelBuffer
    • getBytes

      public void getBytes(int index, ChannelBuffer dst)
      Description copied from interface: ChannelBuffer
      Transfers this buffer's data to the specified destination starting at the specified absolute index until the destination becomes non-writable. This method is basically same with ChannelBuffer.getBytes(int, ChannelBuffer, int, int), except that this method increases the writerIndex of the destination by the number of the transferred bytes while ChannelBuffer.getBytes(int, ChannelBuffer, int, int) does not. This method does not modify readerIndex or writerIndex of the source buffer (i.e. this).
      Specified by:
      getBytes in interface ChannelBuffer
    • getBytes

      public void getBytes(int index, ChannelBuffer dst, int length)
      Description copied from interface: ChannelBuffer
      Transfers this buffer's data to the specified destination starting at the specified absolute index. This method is basically same with ChannelBuffer.getBytes(int, ChannelBuffer, int, int), except that this method increases the writerIndex of the destination by the number of the transferred bytes while ChannelBuffer.getBytes(int, ChannelBuffer, int, int) does not. This method does not modify readerIndex or writerIndex of the source buffer (i.e. this).
      Specified by:
      getBytes in interface ChannelBuffer
      Parameters:
      length - the number of bytes to transfer
    • setBytes

      public void setBytes(int index, byte[] src)
      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.
      Specified by:
      setBytes in interface ChannelBuffer
    • setBytes

      public void setBytes(int index, ChannelBuffer 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 becomes unreadable. This method is basically same with ChannelBuffer.setBytes(int, ChannelBuffer, int, int), except that this method increases the readerIndex of the source buffer by the number of the transferred bytes while ChannelBuffer.setBytes(int, ChannelBuffer, int, int) does not. This method does not modify readerIndex or writerIndex of the source buffer (i.e. this).
      Specified by:
      setBytes in interface ChannelBuffer
    • setBytes

      public void setBytes(int index, ChannelBuffer src, 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 is basically same with ChannelBuffer.setBytes(int, ChannelBuffer, int, int), except that this method increases the readerIndex of the source buffer by the number of the transferred bytes while ChannelBuffer.setBytes(int, ChannelBuffer, int, int) does not. This method does not modify readerIndex or writerIndex of the source buffer (i.e. this).
      Specified by:
      setBytes in interface ChannelBuffer
      Parameters:
      length - the number of bytes to transfer
    • readByte

      public byte readByte()
      Description copied from interface: ChannelBuffer
      Gets a byte at the current readerIndex and increases the readerIndex by 1 in this buffer.
      Specified by:
      readByte in interface ChannelBuffer
    • 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
      Parameters:
      length - the number of bytes to transfer
      Returns:
      the newly created buffer which contains the transferred bytes
    • 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
      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
    • 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
    • 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
    • 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
      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
    • 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
      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
    • writeByte

      public void writeByte(int value)
      Description copied from interface: ChannelBuffer
      Sets the specified byte at the current writerIndex and increases the writerIndex by 1 in this buffer. The 24 high-order bits of the specified value are ignored.
      Specified by:
      writeByte in interface ChannelBuffer
    • 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
      Parameters:
      srcIndex - the first index of the source
      length - the number of bytes to transfer
    • writeBytes

      public void writeBytes(byte[] src)
      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 (= src.length).
      Specified by:
      writeBytes in interface ChannelBuffer
    • writeBytes

      public void writeBytes(ChannelBuffer 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 becomes unreadable, and increases the writerIndex by the number of the transferred bytes. 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 while ChannelBuffer.writeBytes(ChannelBuffer, int, int) does not.
      Specified by:
      writeBytes in interface ChannelBuffer
    • 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
      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
      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
    • 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
      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
    • copy

      public ChannelBuffer copy()
      Description copied from interface: ChannelBuffer
      Returns a copy of this buffer's readable bytes. Modifying the content of the returned buffer or this buffer does not affect each other at all. This method is identical to buf.copy(buf.readerIndex(), buf.readableBytes()). This method does not modify readerIndex or writerIndex of this buffer.
      Specified by:
      copy in interface ChannelBuffer
    • toByteBuffer

      public ByteBuffer toByteBuffer()
      Description copied from interface: ChannelBuffer
      Converts this buffer's readable bytes 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 is identical to buf.toByteBuffer(buf.readerIndex(), buf.readableBytes()). This method does not modify readerIndex or writerIndex of this buffer.
      Specified by:
      toByteBuffer in interface ChannelBuffer
    • equals

      public boolean equals(Object o)
      Description copied from interface: ChannelBuffer
      Determines if the content of the specified buffer is identical to the content of this array. 'Identical' here means:
      • the size of the contents of the two buffers are same and
      • every single byte of the content of the two buffers are same.
      Please note that it does not compare ChannelBuffer.readerIndex() nor ChannelBuffer.writerIndex(). This method also returns false for null and an object which is not an instance of ChannelBuffer type.
      Specified by:
      equals in interface ChannelBuffer
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • compareTo

      public int compareTo(ChannelBuffer that)
      Specified by:
      compareTo in interface Comparable<ChannelBuffer>
    • toString

      public String toString()
      Overrides:
      toString in class Object