public interface ByteBuf extends io.netty.util.ReferenceCounted, Comparable<ByteBuf>
byte[]
) and NIO buffers.
Unpooled
rather than calling an individual implementation's
constructor.
ByteBuf
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:
ByteBuf
buffer = ...;
for (int i = 0; i < buffer.capacity(); i ++) {
byte b = buffer.getByte(i);
System.out.println((char) b);
}
ByteBuf
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
ByteBuf
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.
ByteBuf
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 ByteBuf
,
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.
ByteBuf
buffer = ...;
while (buffer.maxWritableBytes() >= 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
indexOf(int, int, byte)
methods help you locate an index of
a value which meets a certain criteria. Complicated dynamic sequential
search can be done with ByteBufIndexFinder
as well as simple
static single byte search.
If you are decoding variable length data such as NUL-terminated string, you
will find bytesBefore(byte)
also useful.
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
.
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.
ByteBuf
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.
ByteBuf
can be converted into an NIO ByteBuffer
which shares its
content (i.e. view buffer), you can get it via the nioBuffer()
method. To determine
if a buffer can be converted into an NIO buffer, use nioBufferCount()
.
toString(Charset)
methods convert a ByteBuf
into a String
. Please note that toString()
is not a
conversion method.
ByteBufInputStream
and
ByteBufOutputStream
.Modifier and Type | Method and Description |
---|---|
ByteBufAllocator |
alloc()
Returns the
ByteBufAllocator which created this buffer. |
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 |
bytesBefore(byte value)
Locates the first occurrence of the specified
value in this
buffer. |
int |
bytesBefore(ByteBufIndexFinder indexFinder)
Locates the first place where the specified
indexFinder returns
true . |
int |
bytesBefore(int length,
byte value)
Locates the first occurrence of the specified
value in this
buffer. |
int |
bytesBefore(int length,
ByteBufIndexFinder indexFinder)
Locates the first place where the specified
indexFinder returns
true . |
int |
bytesBefore(int index,
int length,
byte value)
Locates the first occurrence of the specified
value in this
buffer. |
int |
bytesBefore(int index,
int length,
ByteBufIndexFinder indexFinder)
Locates the first place where the specified
indexFinder returns
true . |
int |
capacity()
Returns the number of bytes (octets) this buffer can contain.
|
ByteBuf |
capacity(int newCapacity)
Adjusts the capacity of this buffer.
|
ByteBuf |
clear()
Sets the
readerIndex and writerIndex of this buffer to
0 . |
int |
compareTo(ByteBuf buffer)
Compares the content of the specified buffer to the content of this
buffer.
|
ByteBuf |
copy()
Returns a copy of this buffer's readable bytes.
|
ByteBuf |
copy(int index,
int length)
Returns a copy of this buffer's sub-region.
|
ByteBuf |
discardReadBytes()
Discards the bytes between the 0th index and
readerIndex . |
ByteBuf |
discardSomeReadBytes()
Similar to
discardReadBytes() except that this method might discard
some, all, or none of read bytes depending on its internal implementation to reduce
overall memory bandwidth consumption at the cost of potentially additional memory
consumption. |
ByteBuf |
duplicate()
Returns a buffer which shares the whole region of this buffer.
|
ByteBuf |
ensureWritable(int minWritableBytes)
Makes sure the number of the writable bytes
is equal to or greater than the specified value.
|
int |
ensureWritable(int minWritableBytes,
boolean force)
Tries to make sure the number of the writable bytes
is equal to or greater than the specified value.
|
ByteBuf |
ensureWritableBytes(int minWritableBytes)
Deprecated.
Use
ensureWritable(int) instead. |
boolean |
equals(Object obj)
Determines if the content of the specified buffer is identical to the
content of this array.
|
boolean |
getBoolean(int index)
Gets a boolean at the specified absolute (@code index) in this buffer.
|
byte |
getByte(int index)
Gets a byte at the specified absolute
index in this buffer. |
ByteBuf |
getBytes(int index,
byte[] dst)
Transfers this buffer's data to the specified destination starting at
the specified absolute
index . |
ByteBuf |
getBytes(int index,
byte[] dst,
int dstIndex,
int length)
Transfers this buffer's data to the specified destination starting at
the specified absolute
index . |
ByteBuf |
getBytes(int index,
ByteBuf dst)
Transfers this buffer's data to the specified destination starting at
the specified absolute
index until the destination becomes
non-writable. |
ByteBuf |
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. |
ByteBuf |
getBytes(int index,
ByteBuf dst,
int length)
Transfers this buffer's data to the specified destination starting at
the specified absolute
index . |
ByteBuf |
getBytes(int index,
ByteBuf dst,
int dstIndex,
int length)
Transfers this buffer's data to the specified destination starting at
the specified absolute
index . |
int |
getBytes(int index,
GatheringByteChannel out,
int length)
Transfers this buffer's data to the specified channel starting at the
specified absolute
index . |
ByteBuf |
getBytes(int index,
OutputStream out,
int length)
Transfers this buffer's data to the specified stream starting at the
specified absolute
index . |
char |
getChar(int index)
Gets a 2-byte UTF-16 character at the specified absolute
index in this buffer. |
double |
getDouble(int index)
Gets a 64-bit floating point number at the specified absolute
index in this buffer. |
float |
getFloat(int index)
Gets a 32-bit floating point number at the specified absolute
index in this buffer. |
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. |
boolean |
hasArray()
Returns
true if and only if this buffer has a backing byte array. |
int |
hashCode()
Returns a hash code which was calculated from the content of this
buffer.
|
boolean |
hasMemoryAddress()
Returns
true if and only if this buffer has a reference to the low-level memory address that points
to the backing data. |
int |
indexOf(int fromIndex,
int toIndex,
byte value)
Locates the first occurrence of the specified
value in this
buffer. |
int |
indexOf(int fromIndex,
int toIndex,
ByteBufIndexFinder indexFinder)
Locates the first place where the specified
indexFinder
returns true . |
ByteBuffer |
internalNioBuffer(int index,
int length)
Internal use only: Exposes the internal NIO buffer.
|
boolean |
isDirect()
Returns
true if and only if this buffer is backed by an
NIO direct buffer. |
boolean |
isReadable()
Returns
true
if and only if (this.writerIndex - this.readerIndex) is greater
than 0 . |
boolean |
isReadable(int size)
Returns
true if and only if this buffer contains equal to or more than the specified number of elements. |
boolean |
isWritable()
Returns
true
if and only if (this.capacity - this.writerIndex) is greater
than 0 . |
boolean |
isWritable(int size)
Returns
true if and only if this buffer has enough room to allow writing the specified number of
elements. |
ByteBuf |
markReaderIndex()
Marks the current
readerIndex in this buffer. |
ByteBuf |
markWriterIndex()
Marks the current
writerIndex in this buffer. |
int |
maxCapacity()
Returns the maximum allowed capacity of this buffer.
|
int |
maxWritableBytes()
Returns the maximum possible number of writable bytes, which is equal to
(this.maxCapacity - this.writerIndex) . |
long |
memoryAddress()
Returns the low-level memory address that point to the first byte of ths backing data.
|
ByteBuffer |
nioBuffer()
Exposes this buffer's readable bytes as an NIO
ByteBuffer . |
ByteBuffer |
nioBuffer(int index,
int length)
Exposes this buffer's sub-region as an NIO
ByteBuffer . |
int |
nioBufferCount()
Returns the maximum number of NIO
ByteBuffer s that consist this buffer. |
ByteBuffer[] |
nioBuffers()
Exposes this buffer's readable bytes as an NIO
ByteBuffer 's. |
ByteBuffer[] |
nioBuffers(int index,
int length)
Exposes this buffer's bytes as an NIO
ByteBuffer 's for the specified index and length
The returned buffer shares the content with this buffer, while changing the position and limit
of the returned NIO buffer does not affect the indexes and marks of this buffer. |
ByteOrder |
order()
Returns the endianness
of this buffer.
|
ByteBuf |
order(ByteOrder endianness)
Returns a buffer with the specified
endianness which shares the whole region,
indexes, and marks of this buffer. |
boolean |
readable()
Deprecated.
Use
isReadable() or isReadable(int) instead. |
int |
readableBytes()
Returns the number of readable bytes which is equal to
(this.writerIndex - this.readerIndex) . |
boolean |
readBoolean()
Gets a boolean at the current
readerIndex and increases
the readerIndex by 1 in this buffer. |
byte |
readByte()
Gets a byte at the current
readerIndex and increases
the readerIndex by 1 in this buffer. |
ByteBuf |
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 ). |
ByteBuf |
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 ). |
ByteBuf |
readBytes(ByteBuf 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. |
ByteBuf |
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. |
ByteBuf |
readBytes(ByteBuf 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 ). |
ByteBuf |
readBytes(ByteBuf 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(GatheringByteChannel out,
int length)
Transfers this buffer's data to the specified stream starting at the
current
readerIndex . |
ByteBuf |
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 ). |
ByteBuf |
readBytes(OutputStream out,
int length)
Transfers this buffer's data to the specified stream starting at the
current
readerIndex . |
char |
readChar()
Gets a 2-byte UTF-16 character at the current
readerIndex
and increases the readerIndex by 2 in this buffer. |
double |
readDouble()
Gets a 64-bit floating point number at the current
readerIndex
and increases the readerIndex by 8 in this buffer. |
int |
readerIndex()
Returns the
readerIndex of this buffer. |
ByteBuf |
readerIndex(int readerIndex)
Sets the
readerIndex of this buffer. |
float |
readFloat()
Gets a 32-bit floating point number at the current
readerIndex
and increases the readerIndex by 4 in 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. |
ByteBuf |
readSlice(int length)
Returns a new slice of this buffer's sub-region starting at the current
readerIndex and increases the readerIndex by the size
of the new slice (= length ). |
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. |
ByteBuf |
resetReaderIndex()
Repositions the current
readerIndex to the marked
readerIndex in this buffer. |
ByteBuf |
resetWriterIndex()
Repositions the current
writerIndex to the marked
writerIndex in this buffer. |
ByteBuf |
retain() |
ByteBuf |
retain(int increment) |
ByteBuf |
setBoolean(int index,
boolean value)
Sets the specified boolean at the specified absolute
index in this
buffer. |
ByteBuf |
setByte(int index,
int value)
Sets the specified byte at the specified absolute
index in this
buffer. |
ByteBuf |
setBytes(int index,
byte[] src)
Transfers the specified source array's data to this buffer starting at
the specified absolute
index . |
ByteBuf |
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 . |
ByteBuf |
setBytes(int index,
ByteBuf src)
Transfers the specified source buffer's data to this buffer starting at
the specified absolute
index until the source buffer becomes
unreadable. |
ByteBuf |
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. |
ByteBuf |
setBytes(int index,
ByteBuf src,
int length)
Transfers the specified source buffer's data to this buffer starting at
the specified absolute
index . |
ByteBuf |
setBytes(int index,
ByteBuf 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 in,
int length)
Transfers the content of the specified source stream to this buffer
starting at the specified absolute
index . |
int |
setBytes(int index,
ScatteringByteChannel in,
int length)
Transfers the content of the specified source channel to this buffer
starting at the specified absolute
index . |
ByteBuf |
setChar(int index,
int value)
Sets the specified 2-byte UTF-16 character at the specified absolute
index in this buffer. |
ByteBuf |
setDouble(int index,
double value)
Sets the specified 64-bit floating-point number at the specified
absolute
index in this buffer. |
ByteBuf |
setFloat(int index,
float value)
Sets the specified 32-bit floating-point number at the specified
absolute
index in this buffer. |
ByteBuf |
setIndex(int readerIndex,
int writerIndex)
Sets the
readerIndex and writerIndex of this buffer
in one shot. |
ByteBuf |
setInt(int index,
int value)
Sets the specified 32-bit integer at the specified absolute
index in this buffer. |
ByteBuf |
setLong(int index,
long value)
Sets the specified 64-bit long integer at the specified absolute
index in this buffer. |
ByteBuf |
setMedium(int index,
int value)
Sets the specified 24-bit medium integer at the specified absolute
index in this buffer. |
ByteBuf |
setShort(int index,
int value)
Sets the specified 16-bit short integer at the specified absolute
index in this buffer. |
ByteBuf |
setZero(int index,
int length)
Fills this buffer with NUL (0x00) starting at the specified
absolute
index . |
ByteBuf |
skipBytes(int length)
Increases the current
readerIndex by the specified
length in this buffer. |
ByteBuf |
slice()
Returns a slice of this buffer's readable bytes.
|
ByteBuf |
slice(int index,
int length)
Returns a slice of this buffer's sub-region.
|
String |
toString()
Returns the string representation of this buffer.
|
String |
toString(Charset charset)
Decodes this buffer's readable bytes into a string with the specified
character set name.
|
String |
toString(int index,
int length,
Charset charset)
Decodes this buffer's sub-region into a string with the specified
character set.
|
ByteBuf |
unwrap()
Return the underlying buffer instance if this buffer is a wrapper of another buffer.
|
boolean |
writable()
Deprecated.
Use
isWritable() or isWritable(int) instead. |
int |
writableBytes()
Returns the number of writable bytes which is equal to
(this.capacity - this.writerIndex) . |
ByteBuf |
writeBoolean(boolean value)
Sets the specified boolean at the current
writerIndex
and increases the writerIndex by 1 in this buffer. |
ByteBuf |
writeByte(int value)
Sets the specified byte at the current
writerIndex
and increases the writerIndex by 1 in this buffer. |
ByteBuf |
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 ). |
ByteBuf |
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 ). |
ByteBuf |
writeBytes(ByteBuf 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. |
ByteBuf |
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. |
ByteBuf |
writeBytes(ByteBuf 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 ). |
ByteBuf |
writeBytes(ByteBuf 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 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(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. |
ByteBuf |
writeChar(int value)
Sets the specified 2-byte UTF-16 character at the current
writerIndex and increases the writerIndex by 2
in this buffer. |
ByteBuf |
writeDouble(double value)
Sets the specified 64-bit floating point number at the current
writerIndex and increases the writerIndex by 8
in this buffer. |
ByteBuf |
writeFloat(float value)
Sets the specified 32-bit floating point number at the current
writerIndex and increases the writerIndex by 4
in this buffer. |
ByteBuf |
writeInt(int value)
Sets the specified 32-bit integer at the current
writerIndex
and increases the writerIndex by 4 in this buffer. |
ByteBuf |
writeLong(long value)
Sets the specified 64-bit long integer at the current
writerIndex and increases the writerIndex by 8
in this buffer. |
ByteBuf |
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. |
ByteBuf |
writerIndex(int writerIndex)
Sets the
writerIndex of this buffer. |
ByteBuf |
writeShort(int value)
Sets the specified 16-bit short integer at the current
writerIndex and increases the writerIndex by 2
in this buffer. |
ByteBuf |
writeZero(int length)
Fills this buffer with NUL (0x00) starting at the current
writerIndex and increases the writerIndex by the
specified length . |
int capacity()
ByteBuf capacity(int newCapacity)
newCapacity
is less than the current
capacity, the content of this buffer is truncated. If the newCapacity
is greater
than the current capacity, the buffer is appended with unspecified data whose length is
(newCapacity - currentCapacity)
.int maxCapacity()
capacity(int)
or
ensureWritable(int)
, those methods will raise an
IllegalArgumentException
.ByteBufAllocator alloc()
ByteBufAllocator
which created this buffer.ByteOrder order()
ByteBuf order(ByteOrder endianness)
endianness
which shares the whole region,
indexes, and marks of this buffer. Modifying the content, the indexes, or the marks of the
returned buffer or this buffer affects each other's content, indexes, and marks. If the
specified endianness
is identical to this buffer's byte order, this method can
return this
. This method does not modify readerIndex
or writerIndex
of this buffer.ByteBuf unwrap()
null
if this buffer is not a wrapperboolean isDirect()
true
if and only if this buffer is backed by an
NIO direct buffer.int readerIndex()
readerIndex
of this buffer.ByteBuf readerIndex(int readerIndex)
readerIndex
of this buffer.IndexOutOfBoundsException
- if the specified readerIndex
is
less than 0
or
greater than this.writerIndex
int writerIndex()
writerIndex
of this buffer.ByteBuf writerIndex(int writerIndex)
writerIndex
of this buffer.IndexOutOfBoundsException
- if the specified writerIndex
is
less than this.readerIndex
or
greater than this.capacity
ByteBuf 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:ByteBuf
buf =Unpooled
.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, this method guarantees that it never throws anByteBuf
buf =Unpooled
.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);
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
int readableBytes()
(this.writerIndex - this.readerIndex)
.int writableBytes()
(this.capacity - this.writerIndex)
.int maxWritableBytes()
(this.maxCapacity - this.writerIndex)
.boolean isReadable()
true
if and only if (this.writerIndex - this.readerIndex)
is greater
than 0
.boolean isReadable(int size)
true
if and only if this buffer contains equal to or more than the specified number of elements.@Deprecated boolean readable()
boolean isWritable()
true
if and only if (this.capacity - this.writerIndex)
is greater
than 0
.boolean isWritable(int size)
true
if and only if this buffer has enough room to allow writing the specified number of
elements.@Deprecated boolean writable()
ByteBuf 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.
ByteBuf 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
.ByteBuf resetReaderIndex()
readerIndex
to the marked
readerIndex
in this buffer.IndexOutOfBoundsException
- if the current writerIndex
is less than the marked
readerIndex
ByteBuf 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
.ByteBuf resetWriterIndex()
writerIndex
to the marked
writerIndex
in this buffer.IndexOutOfBoundsException
- if the current readerIndex
is greater than the marked
writerIndex
ByteBuf 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.
ByteBuf discardSomeReadBytes()
discardReadBytes()
except that this method might discard
some, all, or none of read bytes depending on its internal implementation to reduce
overall memory bandwidth consumption at the cost of potentially additional memory
consumption.ByteBuf ensureWritable(int minWritableBytes)
IllegalArgumentException
.minWritableBytes
- the expected minimum number of writable bytesIndexOutOfBoundsException
- if writerIndex()
+ minWritableBytes
> maxCapacity()
@Deprecated ByteBuf ensureWritableBytes(int minWritableBytes)
ensureWritable(int)
instead.int ensureWritable(int minWritableBytes, boolean force)
ensureWritable(int)
,
this method does not raise an exception but returns a code.minWritableBytes
- the expected minimum number of writable bytesforce
- When writerIndex()
+ minWritableBytes
> maxCapacity()
:
true
- the capacity of the buffer is expanded to maxCapacity()
false
- the capacity of the buffer is unchanged0
if the buffer has enough writable bytes, and its capacity is unchanged.
1
if the buffer does not have enough bytes, and its capacity is unchanged.
2
if the buffer has enough writable bytes, and its capacity has been increased.
3
if the buffer does not have enough bytes, but its capacity has been
increased to its maximum.boolean getBoolean(int index)
readerIndex
or writerIndex
of this buffer.IndexOutOfBoundsException
- if the specified index
is less than 0
or
index + 1
is greater than this.capacity
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
short getUnsignedByte(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
short getShort(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 + 2
is greater than this.capacity
int getUnsignedShort(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 + 2
is greater than this.capacity
int getMedium(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 + 3
is greater than this.capacity
int getUnsignedMedium(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 + 3
is greater than this.capacity
int getInt(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 + 4
is greater than this.capacity
long getUnsignedInt(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 + 4
is greater than this.capacity
long getLong(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 + 8
is greater than this.capacity
char getChar(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 + 2
is greater than this.capacity
float getFloat(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 + 4
is greater than this.capacity
double getDouble(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 + 8
is greater than this.capacity
ByteBuf getBytes(int index, ByteBuf dst)
index
until the destination becomes
non-writable. This method is basically same with
getBytes(int, ByteBuf, int, int)
, except that this
method increases the writerIndex
of the destination by the
number of the transferred bytes while
getBytes(int, ByteBuf, 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
ByteBuf getBytes(int index, ByteBuf dst, int length)
index
. This method is basically same
with getBytes(int, ByteBuf, int, int)
, except that this
method increases the writerIndex
of the destination by the
number of the transferred bytes while
getBytes(int, ByteBuf, 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 transferIndexOutOfBoundsException
- if the specified index
is less than 0
,
if index + length
is greater than
this.capacity
, or
if length
is greater than dst.writableBytes
ByteBuf getBytes(int index, ByteBuf 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 transferIndexOutOfBoundsException
- 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
ByteBuf getBytes(int index, byte[] dst)
index
.
This method does not modify readerIndex
or writerIndex
of
this bufferIndexOutOfBoundsException
- if the specified index
is less than 0
or
if index + dst.length
is greater than
this.capacity
ByteBuf 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 transferIndexOutOfBoundsException
- 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
ByteBuf 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
ByteBuf getBytes(int index, OutputStream out, int length) throws IOException
index
.
This method does not modify readerIndex
or writerIndex
of
this buffer.length
- the number of bytes to transferIndexOutOfBoundsException
- 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/Oint getBytes(int index, GatheringByteChannel out, int length) throws IOException
index
.
This method does not modify readerIndex
or writerIndex
of
this buffer.length
- the maximum number of bytes to transferIndexOutOfBoundsException
- if the specified index
is less than 0
or
if index + length
is greater than
this.capacity
IOException
- if the specified channel threw an exception during I/OByteBuf setBoolean(int index, boolean value)
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
ByteBuf 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
ByteBuf setShort(int index, int value)
index
in this buffer. The 16 high-order bits of the specified
value are ignored.
This method does not modify readerIndex
or writerIndex
of
this buffer.IndexOutOfBoundsException
- if the specified index
is less than 0
or
index + 2
is greater than this.capacity
ByteBuf setMedium(int index, int value)
index
in this buffer. Please note that the most significant
byte is ignored in the specified value.
This method does not modify readerIndex
or writerIndex
of
this buffer.IndexOutOfBoundsException
- if the specified index
is less than 0
or
index + 3
is greater than this.capacity
ByteBuf setInt(int index, int value)
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 + 4
is greater than this.capacity
ByteBuf setLong(int index, long value)
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 + 8
is greater than this.capacity
ByteBuf setChar(int index, int value)
index
in this buffer.
The 16 high-order bits of the specified value are ignored.
This method does not modify readerIndex
or writerIndex
of
this buffer.IndexOutOfBoundsException
- if the specified index
is less than 0
or
index + 2
is greater than this.capacity
ByteBuf setFloat(int index, float value)
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 + 4
is greater than this.capacity
ByteBuf setDouble(int index, double value)
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 + 8
is greater than this.capacity
ByteBuf setBytes(int index, ByteBuf src)
index
until the source buffer becomes
unreadable. This method is basically same with
setBytes(int, ByteBuf, int, int)
, except that this
method increases the readerIndex
of the source buffer by
the number of the transferred bytes while
setBytes(int, ByteBuf, 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
ByteBuf setBytes(int index, ByteBuf src, int length)
index
. This method is basically same
with setBytes(int, ByteBuf, int, int)
, except that this
method increases the readerIndex
of the source buffer by
the number of the transferred bytes while
setBytes(int, ByteBuf, 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 transferIndexOutOfBoundsException
- if the specified index
is less than 0
,
if index + length
is greater than
this.capacity
, or
if length
is greater than src.readableBytes
ByteBuf setBytes(int index, ByteBuf 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 transferIndexOutOfBoundsException
- 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
ByteBuf 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
ByteBuf 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
ByteBuf 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
int setBytes(int index, InputStream in, 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/Oint setBytes(int index, ScatteringByteChannel in, int length) throws IOException
index
.
This method does not modify readerIndex
or writerIndex
of
this buffer.length
- the maximum 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 channel threw an exception during I/OByteBuf setZero(int index, int length)
index
.
This method does not modify readerIndex
or writerIndex
of
this buffer.length
- the number of NULs to write to the bufferIndexOutOfBoundsException
- if the specified index
is less than 0
or
if index + length
is greater than this.capacity
boolean readBoolean()
readerIndex
and increases
the readerIndex
by 1
in this buffer.IndexOutOfBoundsException
- if this.readableBytes
is less than 1
byte readByte()
readerIndex
and increases
the readerIndex
by 1
in this buffer.IndexOutOfBoundsException
- if this.readableBytes
is less than 1
short readUnsignedByte()
readerIndex
and increases
the readerIndex
by 1
in this buffer.IndexOutOfBoundsException
- if this.readableBytes
is less than 1
short readShort()
readerIndex
and increases the readerIndex
by 2
in this buffer.IndexOutOfBoundsException
- if this.readableBytes
is less than 2
int readUnsignedShort()
readerIndex
and increases the readerIndex
by 2
in this buffer.IndexOutOfBoundsException
- if this.readableBytes
is less than 2
int readMedium()
readerIndex
and increases the readerIndex
by 3
in this buffer.IndexOutOfBoundsException
- if this.readableBytes
is less than 3
int readUnsignedMedium()
readerIndex
and increases the readerIndex
by 3
in this buffer.IndexOutOfBoundsException
- if this.readableBytes
is less than 3
int readInt()
readerIndex
and increases the readerIndex
by 4
in this buffer.IndexOutOfBoundsException
- if this.readableBytes
is less than 4
long readUnsignedInt()
readerIndex
and increases the readerIndex
by 4
in this buffer.IndexOutOfBoundsException
- if this.readableBytes
is less than 4
long readLong()
readerIndex
and increases the readerIndex
by 8
in this buffer.IndexOutOfBoundsException
- if this.readableBytes
is less than 8
char readChar()
readerIndex
and increases the readerIndex
by 2
in this buffer.IndexOutOfBoundsException
- if this.readableBytes
is less than 2
float readFloat()
readerIndex
and increases the readerIndex
by 4
in this buffer.IndexOutOfBoundsException
- if this.readableBytes
is less than 4
double readDouble()
readerIndex
and increases the readerIndex
by 8
in this buffer.IndexOutOfBoundsException
- if this.readableBytes
is less than 8
ByteBuf 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 transferIndexOutOfBoundsException
- if length
is greater than this.readableBytes
ByteBuf readSlice(int length)
readerIndex
and increases the readerIndex
by the size
of the new slice (= length
).length
- the size of the new sliceIndexOutOfBoundsException
- if length
is greater than this.readableBytes
ByteBuf readBytes(ByteBuf 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(ByteBuf, int, int)
, except that this method
increases the writerIndex
of the destination by the number of
the transferred bytes while readBytes(ByteBuf, int, int)
does not.IndexOutOfBoundsException
- if dst.writableBytes
is greater than
this.readableBytes
ByteBuf readBytes(ByteBuf dst, int length)
readerIndex
and increases the readerIndex
by the number of the transferred bytes (= length
). This method
is basically same with readBytes(ByteBuf, int, int)
,
except that this method increases the writerIndex
of the
destination by the number of the transferred bytes (= length
)
while readBytes(ByteBuf, int, int)
does not.IndexOutOfBoundsException
- if length
is greater than this.readableBytes
or
if length
is greater than dst.writableBytes
ByteBuf readBytes(ByteBuf 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 transferIndexOutOfBoundsException
- if the specified dstIndex
is less than 0
,
if length
is greater than this.readableBytes
, or
if dstIndex + length
is greater than
dst.capacity
ByteBuf 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
ByteBuf 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 transferIndexOutOfBoundsException
- if the specified dstIndex
is less than 0
,
if length
is greater than this.readableBytes
, or
if dstIndex + length
is greater than dst.length
ByteBuf 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
ByteBuf readBytes(OutputStream out, int length) throws IOException
readerIndex
.length
- the number of bytes to transferIndexOutOfBoundsException
- if length
is greater than this.readableBytes
IOException
- if the specified stream threw an exception during I/Oint readBytes(GatheringByteChannel out, int length) throws IOException
readerIndex
.length
- the maximum number of bytes to transferIndexOutOfBoundsException
- if length
is greater than this.readableBytes
IOException
- if the specified channel threw an exception during I/OByteBuf skipBytes(int length)
readerIndex
by the specified
length
in this buffer.IndexOutOfBoundsException
- if length
is greater than this.readableBytes
ByteBuf writeBoolean(boolean value)
writerIndex
and increases the writerIndex
by 1
in this buffer.IndexOutOfBoundsException
- if this.writableBytes
is less than 1
ByteBuf 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
ByteBuf writeShort(int value)
writerIndex
and increases the writerIndex
by 2
in this buffer. The 16 high-order bits of the specified value are ignored.IndexOutOfBoundsException
- if this.writableBytes
is less than 2
ByteBuf writeMedium(int value)
writerIndex
and increases the writerIndex
by 3
in this buffer.IndexOutOfBoundsException
- if this.writableBytes
is less than 3
ByteBuf writeInt(int value)
writerIndex
and increases the writerIndex
by 4
in this buffer.IndexOutOfBoundsException
- if this.writableBytes
is less than 4
ByteBuf writeLong(long value)
writerIndex
and increases the writerIndex
by 8
in this buffer.IndexOutOfBoundsException
- if this.writableBytes
is less than 8
ByteBuf writeChar(int value)
writerIndex
and increases the writerIndex
by 2
in this buffer. The 16 high-order bits of the specified value are ignored.IndexOutOfBoundsException
- if this.writableBytes
is less than 2
ByteBuf writeFloat(float value)
writerIndex
and increases the writerIndex
by 4
in this buffer.IndexOutOfBoundsException
- if this.writableBytes
is less than 4
ByteBuf writeDouble(double value)
writerIndex
and increases the writerIndex
by 8
in this buffer.IndexOutOfBoundsException
- if this.writableBytes
is less than 8
ByteBuf writeBytes(ByteBuf 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(ByteBuf, int, int)
, except that this method
increases the readerIndex
of the source buffer by the number of
the transferred bytes while writeBytes(ByteBuf, int, int)
does not.IndexOutOfBoundsException
- if src.readableBytes
is greater than
this.writableBytes
ByteBuf writeBytes(ByteBuf src, int length)
writerIndex
and increases the writerIndex
by the number of the transferred bytes (= length
). This method
is basically same with writeBytes(ByteBuf, int, int)
,
except that this method increases the readerIndex
of the source
buffer by the number of the transferred bytes (= length
) while
writeBytes(ByteBuf, int, int)
does not.length
- the number of bytes to transferIndexOutOfBoundsException
- if length
is greater than this.writableBytes
or
if length
is greater then src.readableBytes
ByteBuf writeBytes(ByteBuf 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 transferIndexOutOfBoundsException
- if the specified srcIndex
is less than 0
,
if srcIndex + length
is greater than
src.capacity
, or
if length
is greater than this.writableBytes
ByteBuf 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
ByteBuf writeBytes(byte[] 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 transferIndexOutOfBoundsException
- if the specified srcIndex
is less than 0
,
if srcIndex + length
is greater than
src.length
, or
if length
is greater than this.writableBytes
ByteBuf 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
int writeBytes(InputStream in, int length) throws IOException
writerIndex
and increases the
writerIndex
by the number of the transferred bytes.length
- the number of bytes to transferIndexOutOfBoundsException
- if length
is greater than this.writableBytes
IOException
- if the specified stream threw an exception during I/Oint writeBytes(ScatteringByteChannel in, int length) throws IOException
writerIndex
and increases the
writerIndex
by the number of the transferred bytes.length
- the maximum number of bytes to transferIndexOutOfBoundsException
- if length
is greater than this.writableBytes
IOException
- if the specified channel threw an exception during I/OByteBuf writeZero(int length)
writerIndex
and increases the writerIndex
by the
specified length
.length
- the number of NULs to write to the bufferIndexOutOfBoundsException
- if length
is greater than this.writableBytes
int indexOf(int fromIndex, int toIndex, byte value)
value
in this
buffer. The search takes place from the specified fromIndex
(inclusive) to the specified toIndex
(exclusive).
If fromIndex
is greater than toIndex
, the search is
performed in a reversed order.
This method does not modify readerIndex
or writerIndex
of
this buffer.
-1
otherwise.int indexOf(int fromIndex, int toIndex, ByteBufIndexFinder indexFinder)
indexFinder
returns true
. The search takes place from the specified
fromIndex
(inclusive) to the specified toIndex
(exclusive).
If fromIndex
is greater than toIndex
, the search is
performed in a reversed order.
This method does not modify readerIndex
or writerIndex
of
this buffer.
indexFinder
returned true
. -1
if the indexFinder
did not return true
at all.int bytesBefore(byte value)
value
in this
buffer. The search takes place from the current readerIndex
(inclusive) to the current writerIndex
(exclusive).
This method does not modify readerIndex
or writerIndex
of
this buffer.
readerIndex
and the first occurrence if found. -1
otherwise.int bytesBefore(ByteBufIndexFinder indexFinder)
indexFinder
returns
true
. The search takes place from the current readerIndex
(inclusive) to the current writerIndex
.
This method does not modify readerIndex
or writerIndex
of
this buffer.
readerIndex
and the first place where the indexFinder
returned
true
. -1
if the indexFinder
did not
return true
at all.int bytesBefore(int length, byte value)
value
in this
buffer. The search starts from the current readerIndex
(inclusive) and lasts for the specified length
.
This method does not modify readerIndex
or writerIndex
of
this buffer.
readerIndex
and the first occurrence if found. -1
otherwise.IndexOutOfBoundsException
- if length
is greater than this.readableBytes
int bytesBefore(int length, ByteBufIndexFinder indexFinder)
indexFinder
returns
true
. The search starts the current readerIndex
(inclusive) and lasts for the specified length
.
This method does not modify readerIndex
or writerIndex
of
this buffer.
readerIndex
and the first place where the indexFinder
returned
true
. -1
if the indexFinder
did not
return true
at all.IndexOutOfBoundsException
- if length
is greater than this.readableBytes
int bytesBefore(int index, int length, byte value)
value
in this
buffer. The search starts from the specified index
(inclusive)
and lasts for the specified length
.
This method does not modify readerIndex
or writerIndex
of
this buffer.
index
and the first occurrence if found. -1
otherwise.IndexOutOfBoundsException
- if index + length
is greater than this.capacity
int bytesBefore(int index, int length, ByteBufIndexFinder indexFinder)
indexFinder
returns
true
. The search starts the specified index
(inclusive)
and lasts for the specified length
.
This method does not modify readerIndex
or writerIndex
of
this buffer.
index
and the first place where the indexFinder
returned
true
. -1
if the indexFinder
did not
return true
at all.IndexOutOfBoundsException
- if index + length
is greater than this.capacity
ByteBuf copy()
buf.copy(buf.readerIndex(), buf.readableBytes())
.
This method does not modify readerIndex
or writerIndex
of
this buffer.ByteBuf copy(int index, int length)
readerIndex
or writerIndex
of
this buffer.ByteBuf slice()
buf.slice(buf.readerIndex(), buf.readableBytes())
.
This method does not modify readerIndex
or writerIndex
of
this buffer.ByteBuf slice(int index, int length)
readerIndex
or writerIndex
of
this buffer.ByteBuf duplicate()
buf.slice(0, buf.capacity())
.
This method does not modify readerIndex
or writerIndex
of
this buffer.int nioBufferCount()
ByteBuffer
s that consist this buffer. Note that nioBuffers()
or nioBuffers(int, int)
might return a less number of ByteBuffer
s.-1
if this buffer has no underlying ByteBuffer
.
the number of the underlying ByteBuffer
s if this buffer has at least one undelying
ByteBuffer
. Note that this method does not return 0
to avoid confusion.nioBuffer()
,
nioBuffer(int, int)
,
nioBuffers()
,
nioBuffers(int, int)
ByteBuffer nioBuffer()
ByteBuffer
. The returned buffer
shares the content with this buffer, while changing the position and limit of the returned
NIO buffer does not affect the indexes and marks of this buffer. This method is identical
to buf.nioBuffer(buf.readerIndex(), buf.readableBytes())
. This method does not
modify readerIndex
or writerIndex
of this buffer. Please note that the
returned NIO buffer will not see the changes of this buffer if this buffer is a dynamic
buffer and it adjusted its capacity.UnsupportedOperationException
- if this buffer cannot create a ByteBuffer
that shares the content with itselfnioBufferCount()
,
nioBuffers()
,
nioBuffers(int, int)
ByteBuffer nioBuffer(int index, int length)
ByteBuffer
. The returned buffer
shares the content with this buffer, while changing the position and limit of the returned
NIO buffer does not affect the indexes and marks of this buffer. This method does not
modify readerIndex
or writerIndex
of this buffer. Please note that the
returned NIO buffer will not see the changes of this buffer if this buffer is a dynamic
buffer and it adjusted its capacity.UnsupportedOperationException
- if this buffer cannot create a ByteBuffer
that shares the content with itselfnioBufferCount()
,
nioBuffers()
,
nioBuffers(int, int)
ByteBuffer internalNioBuffer(int index, int length)
ByteBuffer[] nioBuffers()
ByteBuffer
's. The returned buffer
shares the content with this buffer, while changing the position and limit of the returned
NIO buffer does not affect the indexes and marks of this buffer. This method does not
modify readerIndex
or writerIndex
of this buffer. Please note that the
returned NIO buffer will not see the changes of this buffer if this buffer is a dynamic
buffer and it adjusted its capacity.UnsupportedOperationException
- if this buffer cannot create a ByteBuffer
that shares the content with itselfnioBufferCount()
,
nioBuffer()
,
nioBuffer(int, int)
ByteBuffer[] nioBuffers(int index, int length)
ByteBuffer
's for the specified index and length
The returned buffer shares the content with this buffer, while changing the position and limit
of the returned NIO buffer does not affect the indexes and marks of this buffer. This method does
not modify readerIndex
or writerIndex
of this buffer. Please note that the
returned NIO buffer will not see the changes of this buffer if this buffer is a dynamic
buffer and it adjusted its capacity.UnsupportedOperationException
- if this buffer cannot create a ByteBuffer
that shares the content with itselfnioBufferCount()
,
nioBuffer()
,
nioBuffer(int, int)
boolean 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()
.byte[] array()
UnsupportedOperationException
- if there no accessible backing byte arrayint arrayOffset()
UnsupportedOperationException
- if there no accessible backing byte arrayboolean hasMemoryAddress()
true
if and only if this buffer has a reference to the low-level memory address that points
to the backing data.long memoryAddress()
UnsupportedOperationException
- if this buffer does not support accessing the low-level memory addressString toString(Charset charset)
buf.toString(buf.readerIndex(), buf.readableBytes(), charsetName)
.
This method does not modify readerIndex
or writerIndex
of
this buffer.UnsupportedCharsetException
- if the specified character set name is not supported by the
current VMString toString(int index, int length, Charset charset)
readerIndex
or
writerIndex
of this buffer.int hashCode()
boolean equals(Object obj)
readerIndex()
nor
writerIndex()
. This method also returns false
for
null
and an object which is not an instance of
ByteBuf
type.int compareTo(ByteBuf buffer)
strcmp
,
memcmp
and String.compareTo(String)
.compareTo
in interface Comparable<ByteBuf>
String toString()
readerIndex()
,
writerIndex()
and capacity()
.ByteBuf retain(int increment)
retain
in interface io.netty.util.ReferenceCounted
ByteBuf retain()
retain
in interface io.netty.util.ReferenceCounted
Copyright © 2008-2013 The Netty Project. All Rights Reserved.