|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
public interface ChannelBuffer
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.
ChannelBuffers
rather than calling an individual implementation's
constructor.
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 = buffer.getByte(i);
System.out.println((char) b);
}
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
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 destination 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());
}
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 source 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());
}
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) <= capacityPlease note that there is no guarantee about the content of writable bytes after calling
discardReadBytes()
. The writable bytes will not be
moved in most cases and could even be filled with completely different data
depending on the underlying buffer implementation.
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
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
.
ChannelBuffer
is backed by a byte array (i.e. byte[]
),
you can access it directly via the array()
method. To determine if
a buffer is backed by a byte array, hasArray()
should be used.
toByteBuffer()
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.
ChannelBufferInputStream
and ChannelBufferOutputStream
.
Method Summary | |
---|---|
byte[] |
array()
Returns the backing byte array of this buffer. |
int |
arrayOffset()
Returns the offset of the first byte within the backing byte array of this buffer. |
int |
capacity()
Returns the number of bytes (octets) this buffer can contain. |
void |
clear()
Sets the readerIndex and writerIndex of this buffer to
0 . |
ChannelBuffer |
copy()
Returns a copy of this buffer's readable bytes. |
ChannelBuffer |
copy(int index,
int length)
Returns a copy of this buffer's sub-region. |
void |
discardReadBytes()
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 |
equals(Object o)
Determines if the content of the specified buffer is identical to the content of this array. |
ChannelBufferFactory |
factory()
Returns the factory which creates a ChannelBuffer whose type and
default ByteOrder are same with this buffer. |
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,
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 . |
void |
getBytes(int index,
OutputStream dst,
int length)
Transfers this buffer's data to the specified stream starting at the specified absolute index . |
boolean |
hasArray()
Returns true if and only if this buffer has a backing byte array. |
boolean |
isDirect()
Returns true if and only if this buffer is backed by an NIO
direct 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(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 ). |
ChannelBuffer |
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 dst,
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. |
void |
resetReaderIndex()
Repositions the current readerIndex to the marked readerIndex in this buffer. |
void |
resetWriterIndex()
Marks the current writerIndex in this buffer. |
void |
setByte(int index,
int 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,
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 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 |
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,
InputStream src,
int length)
Transfers the content of the specified source stream 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. |
ByteBuffer |
toByteBuffer()
Converts this buffer's readable bytes into a NIO buffer. |
ByteBuffer |
toByteBuffer(int index,
int length)
Converts this buffer's sub-region into a NIO buffer. |
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(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 index,
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(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 ). |
int |
writeBytes(InputStream src,
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 |
writerIndex()
Returns the writerIndex of this buffer. |
void |
writerIndex(int writerIndex)
Sets the writerIndex of this buffer. |
Methods inherited from interface java.lang.Comparable |
---|
compareTo |
Method Detail |
---|
int capacity()
void clear()
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.
ChannelBuffer copy()
buf.copy(buf.readerIndex(),
buf.readableBytes())
. This method does not modify readerIndex
or
writerIndex
of this buffer.
ChannelBuffer copy(int index, int length)
readerIndex
or writerIndex
of this
buffer.
void discardReadBytes()
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.
void ensureWritableBytes(int writableBytes)
IndexOutOfBoundsException
.writable
bytes
becomes equal to or greater than the specified value. The
expansion involves the reallocation of the internal buffer and
consequently memory copy.
writableBytes
- the expected minimum number of writable bytes
IndexOutOfBoundsException
- if the
writable bytes of this buffer is less
than the specified value and if this
buffer is not a dynamic bufferboolean equals(Object o)
readerIndex()
nor writerIndex()
. This
method also returns false
for null
and an object which is
not an instance of ChannelBuffer
type.
equals
in class Object
ChannelBufferFactory factory()
ChannelBuffer
whose type and
default ByteOrder
are same with this buffer.
byte getByte(int index)
index
in this buffer. This
method does not modify readerIndex
or writerIndex
of this
buffer.
IndexOutOfBoundsException
- if the specified index
is less
than 0
or index + 1
is
greater than this.capacity
void getBytes(int index, byte[] dst)
index
. This method does not modify readerIndex
or writerIndex
of this buffer
IndexOutOfBoundsException
- if the specified index
is less
than 0
or if index +
dst.length
is greater than this.capacity
void getBytes(int index, byte[] dst, int dstIndex, int length)
index
. This method does not modify readerIndex
or writerIndex
of this buffer.
dstIndex
- the first index of the destinationlength
- the number of bytes to transfer
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
void getBytes(int index, ByteBuffer dst)
index
until the destination's position reaches
its limit. This method does not modify readerIndex
or writerIndex
of this buffer while the destination's position
will
be increased.
IndexOutOfBoundsException
- if the specified index
is less
than 0
or if index +
dst.remaining()
is greater than this.capacity
void getBytes(int index, ChannelBuffer dst)
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. This
method does not modify readerIndex
or writerIndex
of the
source buffer (i.e. this
).
IndexOutOfBoundsException
- if the specified index
is less
than 0
or if index +
dst.writableBytes
is greater than
this.capacity
void getBytes(int index, ChannelBuffer dst, int length)
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. This method does not modify readerIndex
or writerIndex
of the source buffer (i.e. this
).
length
- the number of bytes to transfer
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
void getBytes(int index, ChannelBuffer dst, int dstIndex, int length)
index
. This method does not modify readerIndex
or writerIndex
of both the source (i.e. this
) and the destination.
dstIndex
- the first index of the destinationlength
- the number of bytes to transfer
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
void getBytes(int index, OutputStream dst, int length) throws IOException
index
. This method does not modify readerIndex
or writerIndex
of this buffer.
length
- the number of bytes to transfer
IndexOutOfBoundsException
- if the specified index
is less
than 0
or if index +
length
is greater than this.capacity
IOException
- if the specified stream threw an
exception during I/Oboolean isDirect()
true
if and only if this buffer is backed by an NIO
direct buffer.
void markReaderIndex()
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
.
void markWriterIndex()
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
.
boolean readable()
true
if and only if (this.writerIndex -
this.readerIndex)
is greater than 0
.
int readableBytes()
(this.writerIndex - this.readerIndex)
.
byte readByte()
readerIndex
and increases the readerIndex
by 1
in this buffer.
IndexOutOfBoundsException
- if this.readableBytes
is less
than 1
void readBytes(byte[] dst)
readerIndex
and increases the readerIndex
by the
number of the transferred bytes (= dst.length
).
IndexOutOfBoundsException
- if dst.length
is greater than
this.readableBytes
void readBytes(byte[] dst, int dstIndex, int length)
readerIndex
and increases the readerIndex
by the
number of the transferred bytes (= length
).
dstIndex
- the first index of the destinationlength
- the number of bytes to transfer
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
void readBytes(ByteBuffer dst)
readerIndex
until the destination's position reaches its
limit, and increases the readerIndex
by the number of the
transferred bytes.
IndexOutOfBoundsException
- if dst.remaining()
is greater
than this.readableBytes
void readBytes(ChannelBuffer dst)
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.
IndexOutOfBoundsException
- if dst.writableBytes
is greater
than this.readableBytes
void readBytes(ChannelBuffer dst, int length)
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.
IndexOutOfBoundsException
- if length
is greater than
this.readableBytes
or if length
is greater than dst.writableBytes
void readBytes(ChannelBuffer dst, int dstIndex, int length)
readerIndex
and increases the readerIndex
by the
number of the transferred bytes (= length
).
dstIndex
- the first index of the destinationlength
- the number of bytes to transfer
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
ChannelBuffer readBytes(int length)
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.
length
- the number of bytes to transfer
IndexOutOfBoundsException
- if length
is greater than
this.readableBytes
void resetReaderIndex()
readerIndex
to the marked readerIndex
in this buffer.
IndexOutOfBoundsException
- if the current writerIndex
is
less than the marked readerIndex
void resetWriterIndex()
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
.
int readerIndex()
readerIndex
of this buffer.
void readerIndex(int readerIndex)
readerIndex
of this buffer.
IndexOutOfBoundsException
- if the specified readerIndex
is
less than 0
or greater than
this.writerIndex
void readBytes(OutputStream dst, int length) throws IOException
readerIndex
.
length
- the number of bytes to transfer
IndexOutOfBoundsException
- if length
is greater than
this.readableBytes
IOException
- if the specified stream threw an
exception during I/Ovoid setByte(int index, int value)
index
in this
buffer. The 24 high-order bits of the specified value are ignored. This
method does not modify readerIndex
or writerIndex
of this
buffer.
IndexOutOfBoundsException
- if the specified index
is less
than 0
or index + 1
is
greater than this.capacity
void setBytes(int index, byte[] src)
index
. This method does not modify readerIndex
or writerIndex
of this buffer.
IndexOutOfBoundsException
- if the specified index
is less
than 0
or if index +
src.length
is greater than this.capacity
void setBytes(int index, byte[] src, int srcIndex, int length)
index
. This method does not modify readerIndex
or writerIndex
of this buffer.
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
void setBytes(int index, ByteBuffer src)
index
until the source buffer's position
reaches its limit. This method does not modify readerIndex
or
writerIndex
of this buffer.
IndexOutOfBoundsException
- if the specified index
is less
than 0
or if index +
src.remaining()
is greater than this.capacity
void setBytes(int index, ChannelBuffer src)
index
until the source buffer 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 setBytes(int, ChannelBuffer, int, int)
does not. This
method does not modify readerIndex
or writerIndex
of the
source buffer (i.e. this
).
IndexOutOfBoundsException
- if the specified index
is less
than 0
or if index +
src.readableBytes
is greater than
this.capacity
void setBytes(int index, ChannelBuffer src, int length)
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 setBytes(int, ChannelBuffer, int,
int)
does not. This method does not modify readerIndex
or writerIndex
of the source buffer (i.e. this
).
length
- the number of bytes to transfer
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
void setBytes(int index, ChannelBuffer src, int srcIndex, int length)
index
. This method does not modify readerIndex
or writerIndex
of both the source (i.e. this
) and the destination.
srcIndex
- the first index of the sourcelength
- the number of bytes to transfer
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
int setBytes(int index, InputStream src, int length) throws IOException
index
. This method does not
modify readerIndex
or writerIndex
of this buffer.
length
- the number of bytes to transfer
-1
if the specified channel is closed.
IndexOutOfBoundsException
- if the specified index
is less
than 0
or if index +
length
is greater than this.capacity
IOException
- if the specified stream threw an
exception during I/Ovoid setIndex(int readerIndex, int writerIndex)
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.The following code will also fail: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);
// Create a buffer whose readerIndex, writerIndex and capacity are // 0, 8 and 8 respectively.By contrast,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);
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);
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
void skipBytes(int length)
readerIndex
by the specified length
in this buffer.
IndexOutOfBoundsException
- if length
is greater than
this.readableBytes
ByteBuffer toByteBuffer()
buf.toByteBuffer(buf.readerIndex(), buf.readableBytes())
. This method
does not modify readerIndex
or writerIndex
of this
buffer.
ByteBuffer toByteBuffer(int index, int length)
readerIndex
or writerIndex
of this buffer.
boolean writable()
true
if and only if (this.capacity -
this.writerIndex)
is greater than 0
.
int writableBytes()
(this.capacity - this.writerIndex)
.
void writeByte(int value)
writerIndex
and increases
the writerIndex
by 1
in this buffer. The 24 high-order
bits of the specified value are ignored.
IndexOutOfBoundsException
- if this.writableBytes
is less
than 1
void writeBytes(byte[] src)
writerIndex
and increases the writerIndex
by
the number of the transferred bytes (= src.length
).
IndexOutOfBoundsException
- if src.length
is greater than
this.writableBytes
void writeBytes(byte[] src, int index, int length)
writerIndex
and increases the writerIndex
by
the number of the transferred bytes (= length
).
index
- the first index of the sourcelength
- the number of bytes to transfer
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
void writeBytes(ByteBuffer src)
writerIndex
until the source buffer's position
reaches its limit, and increases the writerIndex
by the number of
the transferred bytes.
IndexOutOfBoundsException
- if src.remaining()
is greater
than this.writableBytes
void writeBytes(ChannelBuffer src)
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.
IndexOutOfBoundsException
- if src.readableBytes
is greater
than this.writableBytes
void writeBytes(ChannelBuffer src, int length)
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.
length
- the number of bytes to transfer
IndexOutOfBoundsException
- if length
is greater than
this.writableBytes
or if length
is greater then src.readableBytes
void writeBytes(ChannelBuffer src, int srcIndex, int length)
writerIndex
and increases the writerIndex
by
the number of the transferred bytes (= length
).
srcIndex
- the first index of the sourcelength
- the number of bytes to transfer
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
int writeBytes(InputStream src, int length) throws IOException
writerIndex
and increases the writerIndex
by
the number of the transferred bytes.
length
- the number of bytes to transfer
IndexOutOfBoundsException
- if length
is greater than
this.writableBytes
IOException
- if the specified stream threw an
exception during I/Oint writerIndex()
writerIndex
of this buffer.
void writerIndex(int writerIndex)
writerIndex
of this buffer.
IndexOutOfBoundsException
- if the specified writerIndex
is
less than this.readerIndex
or
greater than this.capacity
byte[] array()
UnsupportedOperationException
- if there no accessible backing byte
arrayboolean hasArray()
true
if and only if this buffer has a backing byte array.
If this method returns true, you can safely call array()
and
arrayOffset()
.
int arrayOffset()
UnsupportedOperationException
- if there no accessible backing byte
array
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |