Package org.apache.dubbo.remoting.buffer
Class AbstractChannelBuffer
java.lang.Object
org.apache.dubbo.remoting.buffer.AbstractChannelBuffer
- All Implemented Interfaces:
Comparable<ChannelBuffer>
,ChannelBuffer
- Direct Known Subclasses:
ByteBufferBackedChannelBuffer
,DynamicChannelBuffer
,HeapChannelBuffer
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
clear()
Sets thereaderIndex
andwriterIndex
of this buffer to0
.int
compareTo
(ChannelBuffer that) copy()
Returns a copy of this buffer's readable bytes.void
Discards the bytes between the 0th index andreaderIndex
.void
ensureWritableBytes
(int writableBytes) Makes sure the number of the writable bytes is equal to or greater than the specified value.boolean
Determines if the content of the specified buffer is identical to the content of this array.void
getBytes
(int index, byte[] dst) Transfers this buffer's data to the specified destination starting at the specified absoluteindex
.void
getBytes
(int index, ChannelBuffer dst) Transfers this buffer's data to the specified destination starting at the specified absoluteindex
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 absoluteindex
.int
hashCode()
void
Marks the currentreaderIndex
in this buffer.void
Marks the currentwriterIndex
in this buffer.boolean
readable()
Returnstrue
if and only if(this.writerIndex - this.readerIndex)
is greater than0
.int
Returns the number of readable bytes which is equal to(this.writerIndex - this.readerIndex)
.byte
readByte()
Gets a byte at the currentreaderIndex
and increases thereaderIndex
by1
in this buffer.void
readBytes
(byte[] dst) Transfers this buffer's data to the specified destination starting at the currentreaderIndex
and increases thereaderIndex
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 currentreaderIndex
and increases thereaderIndex
by the number of the transferred bytes (=length
).readBytes
(int length) Transfers this buffer's data to a newly created buffer starting at the currentreaderIndex
and increases thereaderIndex
by the number of the transferred bytes (=length
).void
readBytes
(OutputStream out, int length) Transfers this buffer's data to the specified stream starting at the currentreaderIndex
.void
readBytes
(ByteBuffer dst) Transfers this buffer's data to the specified destination starting at the currentreaderIndex
until the destination's position reaches its limit, and increases thereaderIndex
by the number of the transferred bytes.void
readBytes
(ChannelBuffer dst) Transfers this buffer's data to the specified destination starting at the currentreaderIndex
until the destination becomes non-writable, and increases thereaderIndex
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 currentreaderIndex
and increases thereaderIndex
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 currentreaderIndex
and increases thereaderIndex
by the number of the transferred bytes (=length
).int
Returns thereaderIndex
of this buffer.void
readerIndex
(int readerIndex) Sets thereaderIndex
of this buffer.void
Repositions the currentreaderIndex
to the markedreaderIndex
in this buffer.void
Marks the currentwriterIndex
in this buffer.void
setBytes
(int index, byte[] src) Transfers the specified source array's data to this buffer starting at the specified absoluteindex
.void
setBytes
(int index, ChannelBuffer src) Transfers the specified source buffer's data to this buffer starting at the specified absoluteindex
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 absoluteindex
.void
setIndex
(int readerIndex, int writerIndex) Sets thereaderIndex
andwriterIndex
of this buffer in one shot.void
skipBytes
(int length) Increases the currentreaderIndex
by the specifiedlength
in this buffer.Converts this buffer's readable bytes into a NIO buffer.toString()
boolean
writable()
Returnstrue
if and only if(this.capacity - this.writerIndex)
is greater than0
.int
Returns the number of writable bytes which is equal to(this.capacity - this.writerIndex)
.void
writeByte
(int value) Sets the specified byte at the currentwriterIndex
and increases thewriterIndex
by1
in this buffer.void
writeBytes
(byte[] src) Transfers the specified source array's data to this buffer starting at the currentwriterIndex
and increases thewriterIndex
by the number of the transferred bytes (=src.length
).void
writeBytes
(byte[] src, int srcIndex, int length) Transfers the specified source array's data to this buffer starting at the currentwriterIndex
and increases thewriterIndex
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 currentwriterIndex
and increases thewriterIndex
by the number of the transferred bytes.void
writeBytes
(ByteBuffer src) Transfers the specified source buffer's data to this buffer starting at the currentwriterIndex
until the source buffer's position reaches its limit, and increases thewriterIndex
by the number of the transferred bytes.void
writeBytes
(ChannelBuffer src) Transfers the specified source buffer's data to this buffer starting at the currentwriterIndex
until the source buffer becomes unreadable, and increases thewriterIndex
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 currentwriterIndex
and increases thewriterIndex
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 currentwriterIndex
and increases thewriterIndex
by the number of the transferred bytes (=length
).int
Returns thewriterIndex
of this buffer.void
writerIndex
(int writerIndex) Sets thewriterIndex
of this buffer.
-
Constructor Details
-
AbstractChannelBuffer
public AbstractChannelBuffer()
-
-
Method Details
-
readerIndex
public int readerIndex()Description copied from interface:ChannelBuffer
Returns thereaderIndex
of this buffer.- Specified by:
readerIndex
in interfaceChannelBuffer
-
readerIndex
public void readerIndex(int readerIndex) Description copied from interface:ChannelBuffer
Sets thereaderIndex
of this buffer.- Specified by:
readerIndex
in interfaceChannelBuffer
-
writerIndex
public int writerIndex()Description copied from interface:ChannelBuffer
Returns thewriterIndex
of this buffer.- Specified by:
writerIndex
in interfaceChannelBuffer
-
writerIndex
public void writerIndex(int writerIndex) Description copied from interface:ChannelBuffer
Sets thewriterIndex
of this buffer.- Specified by:
writerIndex
in interfaceChannelBuffer
-
setIndex
public void setIndex(int readerIndex, int writerIndex) Description copied from interface:ChannelBuffer
Sets thereaderIndex
andwriterIndex
of this buffer in one shot. This method is useful when you have to worry about the invocation order ofChannelBuffer.readerIndex(int)
andChannelBuffer.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);ChannelBuffer.setIndex(int, int)
guarantees that it never throws anIndexOutOfBoundsException
as long as the specified indexes meet basic constraints, regardless what the current index values of the buffer are:// No matter what the current state of the buffer is, the following // call always succeeds as long as the capacity of the buffer is not // less than 4. buf.setIndex(2, 4);
- Specified by:
setIndex
in interfaceChannelBuffer
-
clear
public void clear()Description copied from interface:ChannelBuffer
Sets thereaderIndex
andwriterIndex
of this buffer to0
. This method is identical tosetIndex(0, 0)
. Please note that the behavior of this method is different from that of NIO buffer, which sets thelimit
to thecapacity
of the buffer.- Specified by:
clear
in interfaceChannelBuffer
-
readable
public boolean readable()Description copied from interface:ChannelBuffer
Returnstrue
if and only if(this.writerIndex - this.readerIndex)
is greater than0
.- Specified by:
readable
in interfaceChannelBuffer
-
writable
public boolean writable()Description copied from interface:ChannelBuffer
Returnstrue
if and only if(this.capacity - this.writerIndex)
is greater than0
.- Specified by:
writable
in interfaceChannelBuffer
-
readableBytes
public int readableBytes()Description copied from interface:ChannelBuffer
Returns the number of readable bytes which is equal to(this.writerIndex - this.readerIndex)
.- Specified by:
readableBytes
in interfaceChannelBuffer
-
writableBytes
public int writableBytes()Description copied from interface:ChannelBuffer
Returns the number of writable bytes which is equal to(this.capacity - this.writerIndex)
.- Specified by:
writableBytes
in interfaceChannelBuffer
-
markReaderIndex
public void markReaderIndex()Description copied from interface:ChannelBuffer
Marks the currentreaderIndex
in this buffer. You can reposition the currentreaderIndex
to the markedreaderIndex
by callingChannelBuffer.resetReaderIndex()
. The initial value of the markedreaderIndex
is0
.- Specified by:
markReaderIndex
in interfaceChannelBuffer
-
resetReaderIndex
public void resetReaderIndex()Description copied from interface:ChannelBuffer
Repositions the currentreaderIndex
to the markedreaderIndex
in this buffer.- Specified by:
resetReaderIndex
in interfaceChannelBuffer
-
markWriterIndex
public void markWriterIndex()Description copied from interface:ChannelBuffer
Marks the currentwriterIndex
in this buffer. You can reposition the currentwriterIndex
to the markedwriterIndex
by callingChannelBuffer.resetWriterIndex()
. The initial value of the markedwriterIndex
is0
.- Specified by:
markWriterIndex
in interfaceChannelBuffer
-
resetWriterIndex
public void resetWriterIndex()Description copied from interface:ChannelBuffer
Marks the currentwriterIndex
in this buffer. You can reposition the currentwriterIndex
to the markedwriterIndex
by callingChannelBuffer.resetWriterIndex()
. The initial value of the markedwriterIndex
is0
.- Specified by:
resetWriterIndex
in interfaceChannelBuffer
-
discardReadBytes
public void discardReadBytes()Description copied from interface:ChannelBuffer
Discards the bytes between the 0th index andreaderIndex
. It moves the bytes betweenreaderIndex
andwriterIndex
to the 0th index, and setsreaderIndex
andwriterIndex
to0
andoldWriterIndex - oldReaderIndex
respectively. Please refer to the class documentation for more detailed explanation.- Specified by:
discardReadBytes
in interfaceChannelBuffer
-
ensureWritableBytes
public void ensureWritableBytes(int writableBytes) Description copied from interface:ChannelBuffer
Makes sure the number of the writable bytes is equal to or greater than the specified value. If there is enough writable bytes in this buffer, this method returns with no side effect. Otherwise:- a non-dynamic buffer will throw an
IndexOutOfBoundsException
. - a dynamic buffer will expand its
capacity so that the number of the
writable bytes
becomes equal to or greater than the specified value. The expansion involves the reallocation of the internal buffer and consequently memory copy.
- Specified by:
ensureWritableBytes
in interfaceChannelBuffer
- Parameters:
writableBytes
- the expected minimum number of writable bytes
- a non-dynamic buffer will throw an
-
getBytes
public void getBytes(int index, byte[] dst) Description copied from interface:ChannelBuffer
Transfers this buffer's data to the specified destination starting at the specified absoluteindex
. This method does not modifyreaderIndex
orwriterIndex
of this buffer- Specified by:
getBytes
in interfaceChannelBuffer
-
getBytes
Description copied from interface:ChannelBuffer
Transfers this buffer's data to the specified destination starting at the specified absoluteindex
until the destination becomes non-writable. This method is basically same withChannelBuffer.getBytes(int, ChannelBuffer, int, int)
, except that this method increases thewriterIndex
of the destination by the number of the transferred bytes whileChannelBuffer.getBytes(int, ChannelBuffer, int, int)
does not. This method does not modifyreaderIndex
orwriterIndex
of the source buffer (i.e.this
).- Specified by:
getBytes
in interfaceChannelBuffer
-
getBytes
Description copied from interface:ChannelBuffer
Transfers this buffer's data to the specified destination starting at the specified absoluteindex
. This method is basically same withChannelBuffer.getBytes(int, ChannelBuffer, int, int)
, except that this method increases thewriterIndex
of the destination by the number of the transferred bytes whileChannelBuffer.getBytes(int, ChannelBuffer, int, int)
does not. This method does not modifyreaderIndex
orwriterIndex
of the source buffer (i.e.this
).- Specified by:
getBytes
in interfaceChannelBuffer
- Parameters:
length
- the number of bytes to transfer
-
setBytes
public void setBytes(int index, byte[] src) Description copied from interface:ChannelBuffer
Transfers the specified source array's data to this buffer starting at the specified absoluteindex
. This method does not modifyreaderIndex
orwriterIndex
of this buffer.- Specified by:
setBytes
in interfaceChannelBuffer
-
setBytes
Description copied from interface:ChannelBuffer
Transfers the specified source buffer's data to this buffer starting at the specified absoluteindex
until the source buffer becomes unreadable. This method is basically same withChannelBuffer.setBytes(int, ChannelBuffer, int, int)
, except that this method increases thereaderIndex
of the source buffer by the number of the transferred bytes whileChannelBuffer.setBytes(int, ChannelBuffer, int, int)
does not. This method does not modifyreaderIndex
orwriterIndex
of the source buffer (i.e.this
).- Specified by:
setBytes
in interfaceChannelBuffer
-
setBytes
Description copied from interface:ChannelBuffer
Transfers the specified source buffer's data to this buffer starting at the specified absoluteindex
. This method is basically same withChannelBuffer.setBytes(int, ChannelBuffer, int, int)
, except that this method increases thereaderIndex
of the source buffer by the number of the transferred bytes whileChannelBuffer.setBytes(int, ChannelBuffer, int, int)
does not. This method does not modifyreaderIndex
orwriterIndex
of the source buffer (i.e.this
).- Specified by:
setBytes
in interfaceChannelBuffer
- Parameters:
length
- the number of bytes to transfer
-
readByte
public byte readByte()Description copied from interface:ChannelBuffer
Gets a byte at the currentreaderIndex
and increases thereaderIndex
by1
in this buffer.- Specified by:
readByte
in interfaceChannelBuffer
-
readBytes
Description copied from interface:ChannelBuffer
Transfers this buffer's data to a newly created buffer starting at the currentreaderIndex
and increases thereaderIndex
by the number of the transferred bytes (=length
). The returned buffer'sreaderIndex
andwriterIndex
are0
andlength
respectively.- Specified by:
readBytes
in interfaceChannelBuffer
- Parameters:
length
- the number of bytes to transfer- Returns:
- the newly created buffer which contains the transferred bytes
-
readBytes
public void readBytes(byte[] dst, int dstIndex, int length) Description copied from interface:ChannelBuffer
Transfers this buffer's data to the specified destination starting at the currentreaderIndex
and increases thereaderIndex
by the number of the transferred bytes (=length
).- Specified by:
readBytes
in interfaceChannelBuffer
- Parameters:
dstIndex
- the first index of the destinationlength
- the number of bytes to transfer
-
readBytes
public void readBytes(byte[] dst) Description copied from interface:ChannelBuffer
Transfers this buffer's data to the specified destination starting at the currentreaderIndex
and increases thereaderIndex
by the number of the transferred bytes (=dst.length
).- Specified by:
readBytes
in interfaceChannelBuffer
-
readBytes
Description copied from interface:ChannelBuffer
Transfers this buffer's data to the specified destination starting at the currentreaderIndex
until the destination becomes non-writable, and increases thereaderIndex
by the number of the transferred bytes. This method is basically same withChannelBuffer.readBytes(ChannelBuffer, int, int)
, except that this method increases thewriterIndex
of the destination by the number of the transferred bytes whileChannelBuffer.readBytes(ChannelBuffer, int, int)
does not.- Specified by:
readBytes
in interfaceChannelBuffer
-
readBytes
Description copied from interface:ChannelBuffer
Transfers this buffer's data to the specified destination starting at the currentreaderIndex
and increases thereaderIndex
by the number of the transferred bytes (=length
). This method is basically same withChannelBuffer.readBytes(ChannelBuffer, int, int)
, except that this method increases thewriterIndex
of the destination by the number of the transferred bytes (=length
) whileChannelBuffer.readBytes(ChannelBuffer, int, int)
does not.- Specified by:
readBytes
in interfaceChannelBuffer
-
readBytes
Description copied from interface:ChannelBuffer
Transfers this buffer's data to the specified destination starting at the currentreaderIndex
and increases thereaderIndex
by the number of the transferred bytes (=length
).- Specified by:
readBytes
in interfaceChannelBuffer
- Parameters:
dstIndex
- the first index of the destinationlength
- the number of bytes to transfer
-
readBytes
Description copied from interface:ChannelBuffer
Transfers this buffer's data to the specified destination starting at the currentreaderIndex
until the destination's position reaches its limit, and increases thereaderIndex
by the number of the transferred bytes.- Specified by:
readBytes
in interfaceChannelBuffer
-
readBytes
Description copied from interface:ChannelBuffer
Transfers this buffer's data to the specified stream starting at the currentreaderIndex
.- Specified by:
readBytes
in interfaceChannelBuffer
- Parameters:
length
- the number of bytes to transfer- Throws:
IOException
- if the specified stream threw an exception during I/O
-
skipBytes
public void skipBytes(int length) Description copied from interface:ChannelBuffer
Increases the currentreaderIndex
by the specifiedlength
in this buffer.- Specified by:
skipBytes
in interfaceChannelBuffer
-
writeByte
public void writeByte(int value) Description copied from interface:ChannelBuffer
Sets the specified byte at the currentwriterIndex
and increases thewriterIndex
by1
in this buffer. The 24 high-order bits of the specified value are ignored.- Specified by:
writeByte
in interfaceChannelBuffer
-
writeBytes
public void writeBytes(byte[] src, int srcIndex, int length) Description copied from interface:ChannelBuffer
Transfers the specified source array's data to this buffer starting at the currentwriterIndex
and increases thewriterIndex
by the number of the transferred bytes (=length
).- Specified by:
writeBytes
in interfaceChannelBuffer
- Parameters:
srcIndex
- the first index of the sourcelength
- the number of bytes to transfer
-
writeBytes
public void writeBytes(byte[] src) Description copied from interface:ChannelBuffer
Transfers the specified source array's data to this buffer starting at the currentwriterIndex
and increases thewriterIndex
by the number of the transferred bytes (=src.length
).- Specified by:
writeBytes
in interfaceChannelBuffer
-
writeBytes
Description copied from interface:ChannelBuffer
Transfers the specified source buffer's data to this buffer starting at the currentwriterIndex
until the source buffer becomes unreadable, and increases thewriterIndex
by the number of the transferred bytes. This method is basically same withChannelBuffer.writeBytes(ChannelBuffer, int, int)
, except that this method increases thereaderIndex
of the source buffer by the number of the transferred bytes whileChannelBuffer.writeBytes(ChannelBuffer, int, int)
does not.- Specified by:
writeBytes
in interfaceChannelBuffer
-
writeBytes
Description copied from interface:ChannelBuffer
Transfers the specified source buffer's data to this buffer starting at the currentwriterIndex
and increases thewriterIndex
by the number of the transferred bytes (=length
). This method is basically same withChannelBuffer.writeBytes(ChannelBuffer, int, int)
, except that this method increases thereaderIndex
of the source buffer by the number of the transferred bytes (=length
) whileChannelBuffer.writeBytes(ChannelBuffer, int, int)
does not.- Specified by:
writeBytes
in interfaceChannelBuffer
- Parameters:
length
- the number of bytes to transfer
-
writeBytes
Description copied from interface:ChannelBuffer
Transfers the specified source buffer's data to this buffer starting at the currentwriterIndex
and increases thewriterIndex
by the number of the transferred bytes (=length
).- Specified by:
writeBytes
in interfaceChannelBuffer
- Parameters:
srcIndex
- the first index of the sourcelength
- the number of bytes to transfer
-
writeBytes
Description copied from interface:ChannelBuffer
Transfers the specified source buffer's data to this buffer starting at the currentwriterIndex
until the source buffer's position reaches its limit, and increases thewriterIndex
by the number of the transferred bytes.- Specified by:
writeBytes
in interfaceChannelBuffer
-
writeBytes
Description copied from interface:ChannelBuffer
Transfers the content of the specified stream to this buffer starting at the currentwriterIndex
and increases thewriterIndex
by the number of the transferred bytes.- Specified by:
writeBytes
in interfaceChannelBuffer
- Parameters:
length
- the number of bytes to transfer- Returns:
- the actual number of bytes read in from the specified stream
- Throws:
IOException
- if the specified stream threw an exception during I/O
-
copy
Description copied from interface:ChannelBuffer
Returns a copy of this buffer's readable bytes. Modifying the content of the returned buffer or this buffer does not affect each other at all. This method is identical tobuf.copy(buf.readerIndex(), buf.readableBytes())
. This method does not modifyreaderIndex
orwriterIndex
of this buffer.- Specified by:
copy
in interfaceChannelBuffer
-
toByteBuffer
Description copied from interface:ChannelBuffer
Converts this buffer's readable bytes into a NIO buffer. The returned buffer might or might not share the content with this buffer, while they have separate indexes and marks. This method is identical tobuf.toByteBuffer(buf.readerIndex(), buf.readableBytes())
. This method does not modifyreaderIndex
orwriterIndex
of this buffer.- Specified by:
toByteBuffer
in interfaceChannelBuffer
-
equals
Description copied from interface:ChannelBuffer
Determines if the content of the specified buffer is identical to the content of this array. 'Identical' here means:- the size of the contents of the two buffers are same and
- every single byte of the content of the two buffers are same.
ChannelBuffer.readerIndex()
norChannelBuffer.writerIndex()
. This method also returnsfalse
fornull
and an object which is not an instance ofChannelBuffer
type.- Specified by:
equals
in interfaceChannelBuffer
- Overrides:
equals
in classObject
-
hashCode
public int hashCode() -
compareTo
- Specified by:
compareTo
in interfaceComparable<ChannelBuffer>
-
toString
-