org.jboss.messaging.core.buffers
Interface ChannelBuffer

All Superinterfaces:
java.lang.Comparable<ChannelBuffer>, MessagingBuffer
All Known Implementing Classes:
AbstractChannelBuffer, ByteBufferBackedChannelBuffer, DynamicChannelBuffer, HeapChannelBuffer, LargeMessageBufferImpl

public interface ChannelBuffer
extends java.lang.Comparable<ChannelBuffer>, MessagingBuffer

A random and sequential accessible sequence of zero or more bytes (octets). This interface provides an abstract view for one or more primitive byte arrays (byte[]) and NIO buffers.

Creation of a buffer

It is recommended to create a new buffer using the helper methods in ChannelBuffers rather than calling an individual implementation's constructor.

Random Access Indexing

Just like an ordinary primitive byte array, ChannelBuffer uses zero-based indexing. It means the index of the first byte is always 0 and the index of the last byte is always capacity - 1. For example, to iterate all bytes of a buffer, you can do the following, regardless of its internal implementation:
 ChannelBuffer buffer = ...;
 for (int i = 0; i < buffer.capacity(); i ++) {
     byte b = array.getByte(i);
     System.out.println((char) b);
 }
 

Sequential Access Indexing

ChannelBuffer provides two pointer variables to support sequential read and write operations - readerIndex for a read operation and writerIndex for a write operation respectively. The following diagram shows how a buffer is segmented into three areas by the two pointers:
      +-------------------+------------------+------------------+
      | discardable bytes |  readable bytes  |  writable bytes  |
      |                   |     (CONTENT)    |                  |
      +-------------------+------------------+------------------+
      |                   |                  |                  |
      0      <=      readerIndex   <=   writerIndex    <=    capacity
 

Readable bytes (the actual content)

This segment is where the actual data is stored. Any operation whose name starts with read or skip will get or skip the data at the current readerIndex and increase it by the number of read bytes. If the argument of the read operation is also a ChannelBuffer and no start index is specified, the specified buffer's readerIndex is increased together.

If there's not enough content left, IndexOutOfBoundsException is raised. The default value of newly allocated, wrapped or copied buffer's readerIndex is 0.

 // Iterates the readable bytes of a buffer.
 ChannelBuffer buffer = ...;
 while (buffer.readable()) {
     System.out.println(buffer.readByte());
 }
 

Writable bytes

This segment is a undefined space which needs to be filled. Any operation whose name ends with write will write the data at the current writerIndex and increase it by the number of written bytes. If the argument of the write operation is also a ChannelBuffer, and no start index is specified, the specified buffer's readerIndex is increased together.

If there's not enough writable bytes left, IndexOutOfBoundsException is raised. The default value of newly allocated buffer's writerIndex is 0. The default value of wrapped or copied buffer's writerIndex is the capacity of the buffer.

 // Fills the writable bytes of a buffer with random integers.
 ChannelBuffer buffer = ...;
 while (buffer.writableBytes() >= 4) {
     buffer.writeInt(random.nextInt());
 }
 

Discardable bytes

This segment contains the bytes which were read already by a read operation. Initially, the size of this segment is 0, but its size increases up to the writerIndex as read operations are executed. The read bytes can be discarded by calling discardReadBytes() to reclaim unused area as depicted by the following diagram:
  BEFORE discardReadBytes()

      +-------------------+------------------+------------------+
      | discardable bytes |  readable bytes  |  writable bytes  |
      +-------------------+------------------+------------------+
      |                   |                  |                  |
      0      <=      readerIndex   <=   writerIndex    <=    capacity


  AFTER discardReadBytes()

      +------------------+--------------------------------------+
      |  readable bytes  |    writable bytes (got more space)   |
      +------------------+--------------------------------------+
      |                  |                                      |
 readerIndex (0) <= writerIndex (decreased)        <=        capacity
 

Clearing the buffer indexes

You can set both readerIndex and writerIndex to 0 by calling clear(). It does not clear the buffer content (e.g. filling with 0) but just clears the two pointers. Please also note that the semantic of this operation is different from Buffer.clear().
  BEFORE clear()

      +-------------------+------------------+------------------+
      | discardable bytes |  readable bytes  |  writable bytes  |
      +-------------------+------------------+------------------+
      |                   |                  |                  |
      0      <=      readerIndex   <=   writerIndex    <=    capacity


  AFTER clear()

      +---------------------------------------------------------+
      |             writable bytes (got more space)             |
      +---------------------------------------------------------+
      |                                                         |
      0 = readerIndex = writerIndex            <=            capacity
 

Search operations

Various indexOf() methods help you locate an index of a value which meets a certain criteria. Complicated dynamic sequential search can be done with ChannelBufferIndexFinder as well as simple static single byte search.

Mark and reset

There are two marker indexes in every buffer. One is for storing readerIndex and the other is for storing writerIndex. You can always reposition one of the two indexes by calling a reset method. It works in a similar fashion to the mark and reset methods in InputStream except that there's no readlimit.

Derived buffers

You can create a view of an existing buffer by calling either #duplicate(), #slice() or #slice(int, int). A derived buffer will have an independent readerIndex, writerIndex and marker indexes, while it shares other internal data representation, just like a NIO buffer does.

In case a completely fresh copy of an existing buffer is required, please call #copy() method instead.

Conversion to existing JDK types

NIO Buffers

Various toByteBuffer() and #toByteBuffers() methods convert a ChannelBuffer into one or more NIO buffers. These methods avoid buffer allocation and memory copy whenever possible, but there's no guarantee that memory copy will not be involved or that an explicit memory copy will be involved.

Strings

Various toString(String) methods convert a ChannelBuffer into a String. Plesae note that toString() is not a conversion method.

I/O Streams

Please refer to ChannelBufferInputStream and ChannelBufferOutputStream.

Version:
$Rev: 472 $, $Date: 2008-11-14 16:45:53 +0900 (Fri, 14 Nov 2008) $
Author:
The Netty Project (netty-dev@lists.jboss.org), Trustin Lee (tlee@redhat.com)

Method Summary
 byte[] array()
           
 int capacity()
          Returns the number of bytes (octets) this buffer can contain.
 void clear()
          Sets the readerIndex and writerIndex of this buffer to 0.
 int compareTo(ChannelBuffer buffer)
          Compares the content of the specified buffer to the content of this buffer.
 void discardReadBytes()
          Discards the bytes between the 0th index and readerIndex.
 boolean equals(java.lang.Object obj)
          Determines if the content of the specified buffer is identical to the content of this array.
 byte getByte(int index)
          Gets a byte at the specified absolute index in this buffer.
 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, byte[] dst, int dstIndex, int length)
          Transfers this buffer's data to the specified destination starting at the specified absolute index.
 void getBytes(int index, java.nio.ByteBuffer dst)
          Transfers this buffer's data to the specified destination starting at the specified absolute index until the destination's position reaches its limit.
 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.
 void getBytes(int index, ChannelBuffer dst, int dstIndex, int length)
          Transfers this buffer's data to the specified destination starting at the specified absolute index.
 int getBytes(int index, java.nio.channels.GatheringByteChannel out, int length)
          Transfers this buffer's data to the specified channel starting at the specified absolute index.
 void getBytes(int index, java.io.OutputStream out, int length)
          Transfers this buffer's data to the specified stream starting at the specified absolute index.
 int getInt(int index)
          Gets a 32-bit integer at the specified absolute index in this buffer.
 long getLong(int index)
          Gets a 64-bit long integer at the specified absolute index in this buffer.
 int getMedium(int index)
          Gets a 24-bit medium integer at the specified absolute index in this buffer.
 short getShort(int index)
          Gets a 16-bit short integer at the specified absolute index in this buffer.
 short getUnsignedByte(int index)
          Gets an unsigned byte at the specified absolute index in this buffer.
 long getUnsignedInt(int index)
          Gets an unsigned 32-bit integer at the specified absolute index in this buffer.
 int getUnsignedMedium(int index)
          Gets an unsigned 24-bit medium integer at the specified absolute index in this buffer.
 int getUnsignedShort(int index)
          Gets an unsigned 16-bit short integer at the specified absolute index in this buffer.
 int hashCode()
          Returns a hash code which was calculated from the content of this buffer.
 void markReaderIndex()
          Marks the current readerIndex in this buffer.
 void markWriterIndex()
          Marks the current writerIndex in this buffer.
 boolean readable()
          Returns true if and only if (this.writerIndex - this.readerIndex) is greater than 0.
 int readableBytes()
          Returns the number of readable bytes which is equal to (this.writerIndex - this.readerIndex).
 byte readByte()
          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).
 void readBytes(java.nio.ByteBuffer dst)
          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 readBytes(ChannelBuffer dst)
          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 readBytes(java.nio.channels.GatheringByteChannel out, int length)
          Transfers this buffer's data to the specified stream starting at the current readerIndex.
 void readBytes(java.io.OutputStream out, int length)
          Transfers this buffer's data to the specified stream starting at the current readerIndex.
 int readerIndex()
          Returns the readerIndex of this buffer.
 void readerIndex(int readerIndex)
          Sets the readerIndex of this buffer.
 int readInt()
          Gets a 32-bit integer at the current readerIndex and increases the readerIndex by 4 in this buffer.
 long readLong()
          Gets a 64-bit integer at the current readerIndex and increases the readerIndex by 8 in this buffer.
 int readMedium()
          Gets a 24-bit medium integer at the current readerIndex and increases the readerIndex by 3 in this buffer.
 short readShort()
          Gets a 16-bit short integer at the current readerIndex and increases the readerIndex by 2 in this buffer.
 short readUnsignedByte()
          Gets an unsigned byte at the current readerIndex and increases the readerIndex by 1 in this buffer.
 long readUnsignedInt()
          Gets an unsigned 32-bit integer at the current readerIndex and increases the readerIndex by 4 in this buffer.
 int readUnsignedMedium()
          Gets an unsigned 24-bit medium integer at the current readerIndex and increases the readerIndex by 3 in this buffer.
 int readUnsignedShort()
          Gets an unsigned 16-bit short integer at the current readerIndex and increases the readerIndex by 2 in this buffer.
 void resetReaderIndex()
          Repositions the current readerIndex to the marked readerIndex in this buffer.
 void resetWriterIndex()
          Repositions the current writerIndex to the marked writerIndex in this buffer.
 void setByte(int index, byte value)
          Sets the specified byte at the specified absolute index 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, byte[] src, int srcIndex, int length)
          Transfers the specified source array's data to this buffer starting at the specified absolute index.
 void setBytes(int index, java.nio.ByteBuffer src)
          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.
 void setBytes(int index, ChannelBuffer src)
          Transfers the specified source buffer's data to this buffer starting at the specified absolute index until the destination 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 setBytes(int index, ChannelBuffer src, int srcIndex, int length)
          Transfers the specified source buffer's data to this buffer starting at the specified absolute index.
 int setBytes(int index, java.io.InputStream in, int length)
          Transfers the content of the specified source stream to this buffer starting at the specified absolute index.
 int setBytes(int index, java.nio.channels.ScatteringByteChannel in, int length)
          Transfers the content of the specified source channel 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 setInt(int index, int value)
          Sets the specified 32-bit integer at the specified absolute index in this buffer.
 void setLong(int index, long value)
          Sets the specified 64-bit long integer at the specified absolute index in this buffer.
 void setMedium(int index, int value)
          Sets the specified 24-bit medium integer at the specified absolute index in this buffer.
 void setShort(int index, short value)
          Sets the specified 16-bit short integer at the specified absolute index in this buffer.
 void setZero(int index, int length)
          Fills this buffer with NUL (0x00) starting at the specified absolute index.
 void skipBytes(int length)
          Increases the current readerIndex by the specified length in this buffer.
 java.nio.ByteBuffer toByteBuffer()
          Converts this buffer's readable bytes into a NIO buffer.
 java.nio.ByteBuffer toByteBuffer(int index, int length)
          Converts this buffer's sub-region into a NIO buffer.
 java.nio.ByteBuffer[] toByteBuffers(int index, int length)
          Converts this buffer's sub-region into an array of NIO buffers.
 java.lang.String toString()
          Returns the string representation of this buffer.
 java.lang.String toString(int index, int length, java.lang.String charsetName)
          Decodes this buffer's sub-region into a string with the specified character set name.
 java.lang.String toString(java.lang.String charsetName)
          Decodes this buffer's readable bytes into a string with the specified character set name.
 boolean writable()
          Returns true if and only if (this.capacity - this.writerIndex) is greater than 0.
 int writableBytes()
          Returns the number of writable bytes which is equal to (this.capacity - this.writerIndex).
 void writeByte(byte 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).
 void writeBytes(java.nio.ByteBuffer src)
          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 writeBytes(ChannelBuffer src)
          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).
 void writeBytes(java.io.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.
 int writeBytes(java.nio.channels.ScatteringByteChannel in, int length)
          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.
 void writeInt(int value)
          Sets the specified 32-bit integer at the current writerIndex and increases the writerIndex by 4 in this buffer.
 void writeLong(long value)
          Sets the specified 64-bit long integer at the current writerIndex and increases the writerIndex by 8 in this buffer.
 void writeMedium(int value)
          Sets the specified 24-bit medium integer at the current writerIndex and increases the writerIndex by 3 in this buffer.
 int writerIndex()
          Returns the writerIndex of this buffer.
 void writerIndex(int writerIndex)
          Sets the writerIndex of this buffer.
 void writeShort(short value)
          Sets the specified 16-bit short integer at the current writerIndex and increases the writerIndex by 2 in this buffer.
 void writeZero(int length)
          Fills this buffer with NUL (0x00) starting at the current writerIndex and increases the writerIndex by the specified length.
 
Methods inherited from interface org.jboss.messaging.core.remoting.spi.MessagingBuffer
getUnderlyingBuffer, readBoolean, readChar, readDouble, readFloat, readNullableSimpleString, readNullableString, readSimpleString, readString, readUTF, writeBoolean, writeBytes, writeChar, writeDouble, writeFloat, writeNullableSimpleString, writeNullableString, writeSimpleString, writeString, writeUTF
 

Method Detail

capacity

int capacity()
Returns the number of bytes (octets) this buffer can contain.

Specified by:
capacity in interface MessagingBuffer

array

byte[] array()
Specified by:
array in interface MessagingBuffer

readerIndex

int readerIndex()
Returns the readerIndex of this buffer.

Specified by:
readerIndex in interface MessagingBuffer

readerIndex

void readerIndex(int readerIndex)
Sets the readerIndex of this buffer.

Specified by:
readerIndex in interface MessagingBuffer
Throws:
java.lang.IndexOutOfBoundsException - if the specified readerIndex is less than 0 or greater than this.writerIndex

writerIndex

int writerIndex()
Returns the writerIndex of this buffer.

Specified by:
writerIndex in interface MessagingBuffer

writerIndex

void writerIndex(int writerIndex)
Sets the writerIndex of this buffer.

Specified by:
writerIndex in interface MessagingBuffer
Throws:
java.lang.IndexOutOfBoundsException - if the specified writerIndex is less than this.readerIndex or greater than this.capacity

setIndex

void setIndex(int readerIndex,
              int writerIndex)
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 readerIndex(int) and 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, 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 MessagingBuffer
Throws:
java.lang.IndexOutOfBoundsException - if the specified readerIndex is less than 0, if the specified writerIndex is less than the specified readerIndex or if the specified writerIndex is greater than this.capacity

readableBytes

int readableBytes()
Returns the number of readable bytes which is equal to (this.writerIndex - this.readerIndex).

Specified by:
readableBytes in interface MessagingBuffer

writableBytes

int writableBytes()
Returns the number of writable bytes which is equal to (this.capacity - this.writerIndex).

Specified by:
writableBytes in interface MessagingBuffer

readable

boolean readable()
Returns true if and only if (this.writerIndex - this.readerIndex) is greater than 0.

Specified by:
readable in interface MessagingBuffer

writable

boolean writable()
Returns true if and only if (this.capacity - this.writerIndex) is greater than 0.

Specified by:
writable in interface MessagingBuffer

clear

void clear()
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 MessagingBuffer

markReaderIndex

void markReaderIndex()
Marks the current readerIndex in this buffer. You can reposition the current readerIndex to the marked readerIndex by calling resetReaderIndex(). The initial value of the marked readerIndex is 0.


resetReaderIndex

void resetReaderIndex()
Repositions the current readerIndex to the marked readerIndex in this buffer.

Specified by:
resetReaderIndex in interface MessagingBuffer
Throws:
java.lang.IndexOutOfBoundsException - if the current writerIndex is less than the marked readerIndex

markWriterIndex

void markWriterIndex()
Marks the current writerIndex in this buffer. You can reposition the current writerIndex to the marked writerIndex by calling resetWriterIndex(). The initial value of the marked writerIndex is 0.


resetWriterIndex

void resetWriterIndex()
Repositions the current writerIndex to the marked writerIndex in this buffer.

Specified by:
resetWriterIndex in interface MessagingBuffer
Throws:
java.lang.IndexOutOfBoundsException - if the current readerIndex is greater than the marked writerIndex

discardReadBytes

void discardReadBytes()
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.


getByte

byte getByte(int index)
Gets a byte at the specified absolute index in this buffer.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or index + 1 is greater than this.capacity

getUnsignedByte

short getUnsignedByte(int index)
Gets an unsigned byte at the specified absolute index in this buffer.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or index + 1 is greater than this.capacity

getShort

short getShort(int index)
Gets a 16-bit short integer at the specified absolute index in this buffer.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or index + 2 is greater than this.capacity

getUnsignedShort

int getUnsignedShort(int index)
Gets an unsigned 16-bit short integer at the specified absolute index in this buffer.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or index + 2 is greater than this.capacity

getMedium

int getMedium(int index)
Gets a 24-bit medium integer at the specified absolute index in this buffer.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or index + 3 is greater than this.capacity

getUnsignedMedium

int getUnsignedMedium(int index)
Gets an unsigned 24-bit medium integer at the specified absolute index in this buffer.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or index + 3 is greater than this.capacity

getInt

int getInt(int index)
Gets a 32-bit integer at the specified absolute index in this buffer.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or index + 4 is greater than this.capacity

getUnsignedInt

long getUnsignedInt(int index)
Gets an unsigned 32-bit integer at the specified absolute index in this buffer.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or index + 4 is greater than this.capacity

getLong

long getLong(int index)
Gets a 64-bit long integer at the specified absolute index in this buffer.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or index + 8 is greater than this.capacity

getBytes

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. This method is basically same with getBytes(int, ChannelBuffer, int, int), except that this method increases the writerIndex of the destination by the number of the transferred bytes while getBytes(int, ChannelBuffer, int, int) does not.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or if index + dst.writableBytes is greater than this.capacity

getBytes

void getBytes(int index,
              ChannelBuffer dst,
              int length)
Transfers this buffer's data to the specified destination starting at the specified absolute index. This method is basically same with getBytes(int, ChannelBuffer, int, int), except that this method increases the writerIndex of the destination by the number of the transferred bytes while getBytes(int, ChannelBuffer, int, int) does not.

Parameters:
length - the number of bytes to transfer
Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0, if index + length is greater than this.capacity, or if length is greater than dst.writableBytes

getBytes

void getBytes(int index,
              ChannelBuffer dst,
              int dstIndex,
              int length)
Transfers this buffer's data to the specified destination starting at the specified absolute index.

Parameters:
dstIndex - the first index of the destination
length - the number of bytes to transfer
Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0, if the specified dstIndex is less than 0, if index + length is greater than this.capacity, or if dstIndex + length is greater than dst.capacity

getBytes

void getBytes(int index,
              byte[] dst)
Transfers this buffer's data to the specified destination starting at the specified absolute index.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or if index + dst.length is greater than this.capacity

getBytes

void getBytes(int index,
              byte[] dst,
              int dstIndex,
              int length)
Transfers this buffer's data to the specified destination starting at the specified absolute index.

Parameters:
dstIndex - the first index of the destination
length - the number of bytes to transfer
Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0, if the specified dstIndex is less than 0, if index + length is greater than this.capacity, or if dstIndex + length is greater than dst.length

getBytes

void getBytes(int index,
              java.nio.ByteBuffer dst)
Transfers this buffer's data to the specified destination starting at the specified absolute index until the destination's position reaches its limit.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or if index + dst.remaining() is greater than this.capacity

getBytes

void getBytes(int index,
              java.io.OutputStream out,
              int length)
              throws java.io.IOException
Transfers this buffer's data to the specified stream starting at the specified absolute index.

Parameters:
length - the number of bytes to transfer
Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or if index + length is greater than this.capacity
java.io.IOException - if the specified stream threw an exception during I/O

getBytes

int getBytes(int index,
             java.nio.channels.GatheringByteChannel out,
             int length)
             throws java.io.IOException
Transfers this buffer's data to the specified channel starting at the specified absolute index.

Parameters:
length - the maximum number of bytes to transfer
Returns:
the actual number of bytes written out to the specified channel
Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or if index + length is greater than this.capacity
java.io.IOException - if the specified channel threw an exception during I/O

setByte

void setByte(int index,
             byte value)
Sets the specified byte at the specified absolute index in this buffer.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or index + 1 is greater than this.capacity

setShort

void setShort(int index,
              short value)
Sets the specified 16-bit short integer at the specified absolute index in this buffer.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or index + 2 is greater than this.capacity

setMedium

void setMedium(int index,
               int value)
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.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or index + 3 is greater than this.capacity

setInt

void setInt(int index,
            int value)
Sets the specified 32-bit integer at the specified absolute index in this buffer.

Specified by:
setInt in interface MessagingBuffer
Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or index + 4 is greater than this.capacity

setLong

void setLong(int index,
             long value)
Sets the specified 64-bit long integer at the specified absolute index in this buffer.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or index + 8 is greater than this.capacity

setBytes

void setBytes(int index,
              ChannelBuffer src)
Transfers the specified source buffer's data to this buffer starting at the specified absolute index until the destination becomes unreadable. This method is basically same with setBytes(int, ChannelBuffer, int, int), except that this method increases the readerIndex of the source buffer by the number of the transferred bytes while getBytes(int, ChannelBuffer, int, int) does not.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or if index + src.readableBytes is greater than this.capacity

setBytes

void setBytes(int index,
              ChannelBuffer src,
              int length)
Transfers the specified source buffer's data to this buffer starting at the specified absolute index. This method is basically same with setBytes(int, ChannelBuffer, int, int), except that this method increases the readerIndex of the source buffer by the number of the transferred bytes while getBytes(int, ChannelBuffer, int, int) does not.

Parameters:
length - the number of bytes to transfer
Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0, if index + length is greater than this.capacity, or if length is greater than src.readableBytes

setBytes

void setBytes(int index,
              ChannelBuffer src,
              int srcIndex,
              int length)
Transfers the specified source buffer's data to this buffer starting at the specified absolute index.

Parameters:
srcIndex - the first index of the source
length - the number of bytes to transfer
Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0, if the specified srcIndex is less than 0, if index + length is greater than this.capacity, or if srcIndex + length is greater than src.capacity

setBytes

void setBytes(int index,
              byte[] src)
Transfers the specified source array's data to this buffer starting at the specified absolute index.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or if index + src.length is greater than this.capacity

setBytes

void setBytes(int index,
              byte[] src,
              int srcIndex,
              int length)
Transfers the specified source array's data to this buffer starting at the specified absolute index.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0, if the specified srcIndex is less than 0, if index + length is greater than this.capacity, or if srcIndex + length is greater than src.length

setBytes

void setBytes(int index,
              java.nio.ByteBuffer src)
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.

Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or if index + src.remaining() is greater than this.capacity

setBytes

int setBytes(int index,
             java.io.InputStream in,
             int length)
             throws java.io.IOException
Transfers the content of the specified source stream to this buffer starting at the specified absolute index.

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:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or if index + length is greater than this.capacity
java.io.IOException - if the specified stream threw an exception during I/O

setBytes

int setBytes(int index,
             java.nio.channels.ScatteringByteChannel in,
             int length)
             throws java.io.IOException
Transfers the content of the specified source channel to this buffer starting at the specified absolute index.

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:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or if index + length is greater than this.capacity
java.io.IOException - if the specified channel threw an exception during I/O

setZero

void setZero(int index,
             int length)
Fills this buffer with NUL (0x00) starting at the specified absolute index.

Parameters:
length - the number of NULs to write to the buffer
Throws:
java.lang.IndexOutOfBoundsException - if the specified index is less than 0 or if index + length is greater than this.capacity

readByte

byte readByte()
Gets a byte at the current readerIndex and increases the readerIndex by 1 in this buffer.

Specified by:
readByte in interface MessagingBuffer
Throws:
java.lang.IndexOutOfBoundsException - if this.readableBytes is less than 1

readUnsignedByte

short readUnsignedByte()
Gets an unsigned byte at the current readerIndex and increases the readerIndex by 1 in this buffer.

Specified by:
readUnsignedByte in interface MessagingBuffer
Throws:
java.lang.IndexOutOfBoundsException - if this.readableBytes is less than 1

readShort

short readShort()
Gets a 16-bit short integer at the current readerIndex and increases the readerIndex by 2 in this buffer.

Specified by:
readShort in interface MessagingBuffer
Throws:
java.lang.IndexOutOfBoundsException - if this.readableBytes is less than 2

readUnsignedShort

int readUnsignedShort()
Gets an unsigned 16-bit short integer at the current readerIndex and increases the readerIndex by 2 in this buffer.

Specified by:
readUnsignedShort in interface MessagingBuffer
Throws:
java.lang.IndexOutOfBoundsException - if this.readableBytes is less than 2

readMedium

int readMedium()
Gets a 24-bit medium integer at the current readerIndex and increases the readerIndex by 3 in this buffer.

Throws:
java.lang.IndexOutOfBoundsException - if this.readableBytes is less than 3

readUnsignedMedium

int readUnsignedMedium()
Gets an unsigned 24-bit medium integer at the current readerIndex and increases the readerIndex by 3 in this buffer.

Throws:
java.lang.IndexOutOfBoundsException - if this.readableBytes is less than 3

readInt

int readInt()
Gets a 32-bit integer at the current readerIndex and increases the readerIndex by 4 in this buffer.

Specified by:
readInt in interface MessagingBuffer
Throws:
java.lang.IndexOutOfBoundsException - if this.readableBytes is less than 4

readUnsignedInt

long readUnsignedInt()
Gets an unsigned 32-bit integer at the current readerIndex and increases the readerIndex by 4 in this buffer.

Throws:
java.lang.IndexOutOfBoundsException - if this.readableBytes is less than 4

readLong

long readLong()
Gets a 64-bit integer at the current readerIndex and increases the readerIndex by 8 in this buffer.

Specified by:
readLong in interface MessagingBuffer
Throws:
java.lang.IndexOutOfBoundsException - if this.readableBytes is less than 8

readBytes

void readBytes(ChannelBuffer dst)
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 readBytes(ChannelBuffer, int, int), except that this method increases the writerIndex of the destination by the number of the transferred bytes while readBytes(ChannelBuffer, int, int) does not.

Throws:
java.lang.IndexOutOfBoundsException - if dst.writableBytes is greater than this.readableBytes

readBytes

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). This method is basically same with readBytes(ChannelBuffer, int, int), except that this method increases the writerIndex of the destination by the number of the transferred bytes (= length) while readBytes(ChannelBuffer, int, int) does not.

Throws:
java.lang.IndexOutOfBoundsException - if length is greater than this.readableBytes or if length is greater than dst.writableBytes

readBytes

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).

Parameters:
dstIndex - the first index of the destination
length - the number of bytes to transfer
Throws:
java.lang.IndexOutOfBoundsException - if the specified dstIndex is less than 0, if length is greater than this.readableBytes, or if dstIndex + length is greater than dst.capacity

readBytes

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).

Specified by:
readBytes in interface MessagingBuffer
Throws:
java.lang.IndexOutOfBoundsException - if dst.length is greater than this.readableBytes

readBytes

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).

Specified by:
readBytes in interface MessagingBuffer
Parameters:
dstIndex - the first index of the destination
length - the number of bytes to transfer
Throws:
java.lang.IndexOutOfBoundsException - if the specified dstIndex is less than 0, if length is greater than this.readableBytes, or if dstIndex + length is greater than dst.length

readBytes

void readBytes(java.nio.ByteBuffer dst)
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.

Throws:
java.lang.IndexOutOfBoundsException - if dst.remaining() is greater than this.readableBytes

readBytes

void readBytes(java.io.OutputStream out,
               int length)
               throws java.io.IOException
Transfers this buffer's data to the specified stream starting at the current readerIndex.

Parameters:
length - the number of bytes to transfer
Throws:
java.lang.IndexOutOfBoundsException - if length is greater than this.readableBytes
java.io.IOException - if the specified stream threw an exception during I/O

readBytes

int readBytes(java.nio.channels.GatheringByteChannel out,
              int length)
              throws java.io.IOException
Transfers this buffer's data to the specified stream starting at the current readerIndex.

Parameters:
length - the maximum number of bytes to transfer
Returns:
the actual number of bytes written out to the specified channel
Throws:
java.lang.IndexOutOfBoundsException - if length is greater than this.readableBytes
java.io.IOException - if the specified channel threw an exception during I/O

skipBytes

void skipBytes(int length)
Increases the current readerIndex by the specified length in this buffer.

Throws:
java.lang.IndexOutOfBoundsException - if length is greater than this.readableBytes

writeByte

void writeByte(byte value)
Sets the specified byte at the current writerIndex and increases the writerIndex by 1 in this buffer.

Specified by:
writeByte in interface MessagingBuffer
Throws:
java.lang.IndexOutOfBoundsException - if this.writableBytes is less than 1

writeShort

void writeShort(short value)
Sets the specified 16-bit short integer at the current writerIndex and increases the writerIndex by 2 in this buffer.

Specified by:
writeShort in interface MessagingBuffer
Throws:
java.lang.IndexOutOfBoundsException - if this.writableBytes is less than 2

writeMedium

void writeMedium(int value)
Sets the specified 24-bit medium integer at the current writerIndex and increases the writerIndex by 3 in this buffer.

Throws:
java.lang.IndexOutOfBoundsException - if this.writableBytes is less than 3

writeInt

void writeInt(int value)
Sets the specified 32-bit integer at the current writerIndex and increases the writerIndex by 4 in this buffer.

Specified by:
writeInt in interface MessagingBuffer
Throws:
java.lang.IndexOutOfBoundsException - if this.writableBytes is less than 4

writeLong

void writeLong(long value)
Sets the specified 64-bit long integer at the current writerIndex and increases the writerIndex by 8 in this buffer.

Specified by:
writeLong in interface MessagingBuffer
Throws:
java.lang.IndexOutOfBoundsException - if this.writableBytes is less than 8

writeBytes

void writeBytes(ChannelBuffer src)
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 writeBytes(ChannelBuffer, int, int), except that this method increases the readerIndex of the source buffer by the number of the transferred bytes while writeBytes(ChannelBuffer, int, int) does not.

Throws:
java.lang.IndexOutOfBoundsException - if src.readableBytes is greater than this.writableBytes

writeBytes

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). This method is basically same with writeBytes(ChannelBuffer, int, int), except that this method increases the readerIndex of the source buffer by the number of the transferred bytes (= length) while writeBytes(ChannelBuffer, int, int) does not.

Parameters:
length - the number of bytes to transfer
Throws:
java.lang.IndexOutOfBoundsException - if length is greater than this.writableBytes or if length is greater then src.readableBytes

writeBytes

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).

Parameters:
srcIndex - the first index of the source
length - the number of bytes to transfer
Throws:
java.lang.IndexOutOfBoundsException - if the specified srcIndex is less than 0, if srcIndex + length is greater than src.capacity, or if length is greater than this.writableBytes

writeBytes

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).

Specified by:
writeBytes in interface MessagingBuffer
Throws:
java.lang.IndexOutOfBoundsException - if src.length is greater than this.writableBytes

writeBytes

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).

Specified by:
writeBytes in interface MessagingBuffer
Parameters:
srcIndex - the first index of the source
length - the number of bytes to transfer
Throws:
java.lang.IndexOutOfBoundsException - if the specified srcIndex is less than 0, if srcIndex + length is greater than src.length, or if length is greater than this.writableBytes

writeBytes

void writeBytes(java.nio.ByteBuffer src)
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.

Throws:
java.lang.IndexOutOfBoundsException - if src.remaining() is greater than this.writableBytes

writeBytes

void writeBytes(java.io.InputStream in,
                int length)
                throws java.io.IOException
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.

Parameters:
length - the number of bytes to transfer
Throws:
java.lang.IndexOutOfBoundsException - if length is greater than this.writableBytes
java.io.IOException - if the specified stream threw an exception during I/O

writeBytes

int writeBytes(java.nio.channels.ScatteringByteChannel in,
               int length)
               throws java.io.IOException
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.

Parameters:
length - the maximum number of bytes to transfer
Returns:
the actual number of bytes read in from the specified channel
Throws:
java.lang.IndexOutOfBoundsException - if length is greater than this.writableBytes
java.io.IOException - if the specified channel threw an exception during I/O

writeZero

void writeZero(int length)
Fills this buffer with NUL (0x00) starting at the current writerIndex and increases the writerIndex by the specified length.

Parameters:
length - the number of NULs to write to the buffer
Throws:
java.lang.IndexOutOfBoundsException - if length is greater than this.writableBytes

toByteBuffer

java.nio.ByteBuffer toByteBuffer()
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()).


toByteBuffer

java.nio.ByteBuffer toByteBuffer(int index,
                                 int length)
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.


toByteBuffers

java.nio.ByteBuffer[] toByteBuffers(int index,
                                    int length)
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.


toString

java.lang.String toString(java.lang.String charsetName)
Decodes this buffer's readable bytes into a string with the specified character set name. This method is identical to buf.toString(buf.readerIndex(), buf.readableBytes(), charsetName).

Throws:
java.nio.charset.UnsupportedCharsetException - if the specified character set name is not supported by the current VM

toString

java.lang.String toString(int index,
                          int length,
                          java.lang.String charsetName)
Decodes this buffer's sub-region into a string with the specified character set name.

Throws:
java.nio.charset.UnsupportedCharsetException - if the specified character set name is not supported by the current VM

hashCode

int hashCode()
Returns a hash code which was calculated from the content of this buffer. If there's a byte array which is equal to this array, both arrays should return the same value.

Overrides:
hashCode in class java.lang.Object

equals

boolean equals(java.lang.Object obj)
Determines if the content of the specified buffer is identical to the content of this array. 'Identical' here means: Please note that it does not compare readerIndex() nor writerIndex(). This method also returns false for null and an object which is not an instance of ChannelBuffer type.

Overrides:
equals in class java.lang.Object

compareTo

int compareTo(ChannelBuffer buffer)
Compares the content of the specified buffer to the content of this buffer. Comparison is performed in the same manner with the string comparison functions of various languages such as strcmp, memcmp and String.compareTo(String).

Specified by:
compareTo in interface java.lang.Comparable<ChannelBuffer>

toString

java.lang.String toString()
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 readerIndex(), writerIndex() and capacity().

Overrides:
toString in class java.lang.Object


Copyright © 2006 JBoss Inc. All Rights Reserved.