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
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidclear()Sets thereaderIndexandwriterIndexof this buffer to0.intcompareTo(ChannelBuffer that) copy()Returns a copy of this buffer's readable bytes.voidDiscards the bytes between the 0th index andreaderIndex.voidensureWritableBytes(int writableBytes) Makes sure the number of the writable bytes is equal to or greater than the specified value.booleanDetermines if the content of the specified buffer is identical to the content of this array.voidgetBytes(int index, byte[] dst) Transfers this buffer's data to the specified destination starting at the specified absoluteindex.voidgetBytes(int index, ChannelBuffer dst) Transfers this buffer's data to the specified destination starting at the specified absoluteindexuntil the destination becomes non-writable.voidgetBytes(int index, ChannelBuffer dst, int length) Transfers this buffer's data to the specified destination starting at the specified absoluteindex.inthashCode()voidMarks the currentreaderIndexin this buffer.voidMarks the currentwriterIndexin this buffer.booleanreadable()Returnstrueif and only if(this.writerIndex - this.readerIndex)is greater than0.intReturns the number of readable bytes which is equal to(this.writerIndex - this.readerIndex).bytereadByte()Gets a byte at the currentreaderIndexand increases thereaderIndexby1in this buffer.voidreadBytes(byte[] dst) Transfers this buffer's data to the specified destination starting at the currentreaderIndexand increases thereaderIndexby the number of the transferred bytes (=dst.length).voidreadBytes(byte[] dst, int dstIndex, int length) Transfers this buffer's data to the specified destination starting at the currentreaderIndexand increases thereaderIndexby the number of the transferred bytes (=length).readBytes(int length) Transfers this buffer's data to a newly created buffer starting at the currentreaderIndexand increases thereaderIndexby the number of the transferred bytes (=length).voidreadBytes(OutputStream out, int length) Transfers this buffer's data to the specified stream starting at the currentreaderIndex.voidreadBytes(ByteBuffer dst) Transfers this buffer's data to the specified destination starting at the currentreaderIndexuntil the destination's position reaches its limit, and increases thereaderIndexby the number of the transferred bytes.voidreadBytes(ChannelBuffer dst) Transfers this buffer's data to the specified destination starting at the currentreaderIndexuntil the destination becomes non-writable, and increases thereaderIndexby the number of the transferred bytes.voidreadBytes(ChannelBuffer dst, int length) Transfers this buffer's data to the specified destination starting at the currentreaderIndexand increases thereaderIndexby the number of the transferred bytes (=length).voidreadBytes(ChannelBuffer dst, int dstIndex, int length) Transfers this buffer's data to the specified destination starting at the currentreaderIndexand increases thereaderIndexby the number of the transferred bytes (=length).intReturns thereaderIndexof this buffer.voidreaderIndex(int readerIndex) Sets thereaderIndexof this buffer.voidRepositions the currentreaderIndexto the markedreaderIndexin this buffer.voidMarks the currentwriterIndexin this buffer.voidsetBytes(int index, byte[] src) Transfers the specified source array's data to this buffer starting at the specified absoluteindex.voidsetBytes(int index, ChannelBuffer src) Transfers the specified source buffer's data to this buffer starting at the specified absoluteindexuntil the source buffer becomes unreadable.voidsetBytes(int index, ChannelBuffer src, int length) Transfers the specified source buffer's data to this buffer starting at the specified absoluteindex.voidsetIndex(int readerIndex, int writerIndex) Sets thereaderIndexandwriterIndexof this buffer in one shot.voidskipBytes(int length) Increases the currentreaderIndexby the specifiedlengthin this buffer.Converts this buffer's readable bytes into a NIO buffer.toString()booleanwritable()Returnstrueif and only if(this.capacity - this.writerIndex)is greater than0.intReturns the number of writable bytes which is equal to(this.capacity - this.writerIndex).voidwriteByte(int value) Sets the specified byte at the currentwriterIndexand increases thewriterIndexby1in this buffer.voidwriteBytes(byte[] src) Transfers the specified source array's data to this buffer starting at the currentwriterIndexand increases thewriterIndexby the number of the transferred bytes (=src.length).voidwriteBytes(byte[] src, int srcIndex, int length) Transfers the specified source array's data to this buffer starting at the currentwriterIndexand increases thewriterIndexby the number of the transferred bytes (=length).intwriteBytes(InputStream in, int length) Transfers the content of the specified stream to this buffer starting at the currentwriterIndexand increases thewriterIndexby the number of the transferred bytes.voidwriteBytes(ByteBuffer src) Transfers the specified source buffer's data to this buffer starting at the currentwriterIndexuntil the source buffer's position reaches its limit, and increases thewriterIndexby the number of the transferred bytes.voidwriteBytes(ChannelBuffer src) Transfers the specified source buffer's data to this buffer starting at the currentwriterIndexuntil the source buffer becomes unreadable, and increases thewriterIndexby the number of the transferred bytes.voidwriteBytes(ChannelBuffer src, int length) Transfers the specified source buffer's data to this buffer starting at the currentwriterIndexand increases thewriterIndexby the number of the transferred bytes (=length).voidwriteBytes(ChannelBuffer src, int srcIndex, int length) Transfers the specified source buffer's data to this buffer starting at the currentwriterIndexand increases thewriterIndexby the number of the transferred bytes (=length).intReturns thewriterIndexof this buffer.voidwriterIndex(int writerIndex) Sets thewriterIndexof this buffer.
-
Constructor Details
-
AbstractChannelBuffer
public AbstractChannelBuffer()
-
-
Method Details
-
readerIndex
public int readerIndex()Description copied from interface:ChannelBufferReturns thereaderIndexof this buffer.- Specified by:
readerIndexin interfaceChannelBuffer
-
readerIndex
public void readerIndex(int readerIndex) Description copied from interface:ChannelBufferSets thereaderIndexof this buffer.- Specified by:
readerIndexin interfaceChannelBuffer
-
writerIndex
public int writerIndex()Description copied from interface:ChannelBufferReturns thewriterIndexof this buffer.- Specified by:
writerIndexin interfaceChannelBuffer
-
writerIndex
public void writerIndex(int writerIndex) Description copied from interface:ChannelBufferSets thewriterIndexof this buffer.- Specified by:
writerIndexin interfaceChannelBuffer
-
setIndex
public void setIndex(int readerIndex, int writerIndex) Description copied from interface:ChannelBufferSets thereaderIndexandwriterIndexof 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:ChannelBufferbuf =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,ChannelBufferbuf =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 anIndexOutOfBoundsExceptionas 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:
setIndexin interfaceChannelBuffer
-
clear
public void clear()Description copied from interface:ChannelBufferSets thereaderIndexandwriterIndexof 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 thelimitto thecapacityof the buffer.- Specified by:
clearin interfaceChannelBuffer
-
readable
public boolean readable()Description copied from interface:ChannelBufferReturnstrueif and only if(this.writerIndex - this.readerIndex)is greater than0.- Specified by:
readablein interfaceChannelBuffer
-
writable
public boolean writable()Description copied from interface:ChannelBufferReturnstrueif and only if(this.capacity - this.writerIndex)is greater than0.- Specified by:
writablein interfaceChannelBuffer
-
readableBytes
public int readableBytes()Description copied from interface:ChannelBufferReturns the number of readable bytes which is equal to(this.writerIndex - this.readerIndex).- Specified by:
readableBytesin interfaceChannelBuffer
-
writableBytes
public int writableBytes()Description copied from interface:ChannelBufferReturns the number of writable bytes which is equal to(this.capacity - this.writerIndex).- Specified by:
writableBytesin interfaceChannelBuffer
-
markReaderIndex
public void markReaderIndex()Description copied from interface:ChannelBufferMarks the currentreaderIndexin this buffer. You can reposition the currentreaderIndexto the markedreaderIndexby callingChannelBuffer.resetReaderIndex(). The initial value of the markedreaderIndexis0.- Specified by:
markReaderIndexin interfaceChannelBuffer
-
resetReaderIndex
public void resetReaderIndex()Description copied from interface:ChannelBufferRepositions the currentreaderIndexto the markedreaderIndexin this buffer.- Specified by:
resetReaderIndexin interfaceChannelBuffer
-
markWriterIndex
public void markWriterIndex()Description copied from interface:ChannelBufferMarks the currentwriterIndexin this buffer. You can reposition the currentwriterIndexto the markedwriterIndexby callingChannelBuffer.resetWriterIndex(). The initial value of the markedwriterIndexis0.- Specified by:
markWriterIndexin interfaceChannelBuffer
-
resetWriterIndex
public void resetWriterIndex()Description copied from interface:ChannelBufferMarks the currentwriterIndexin this buffer. You can reposition the currentwriterIndexto the markedwriterIndexby callingChannelBuffer.resetWriterIndex(). The initial value of the markedwriterIndexis0.- Specified by:
resetWriterIndexin interfaceChannelBuffer
-
discardReadBytes
public void discardReadBytes()Description copied from interface:ChannelBufferDiscards the bytes between the 0th index andreaderIndex. It moves the bytes betweenreaderIndexandwriterIndexto the 0th index, and setsreaderIndexandwriterIndexto0andoldWriterIndex - oldReaderIndexrespectively. Please refer to the class documentation for more detailed explanation.- Specified by:
discardReadBytesin interfaceChannelBuffer
-
ensureWritableBytes
public void ensureWritableBytes(int writableBytes) Description copied from interface:ChannelBufferMakes 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 bytesbecomes equal to or greater than the specified value. The expansion involves the reallocation of the internal buffer and consequently memory copy.
- Specified by:
ensureWritableBytesin 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:ChannelBufferTransfers this buffer's data to the specified destination starting at the specified absoluteindex. This method does not modifyreaderIndexorwriterIndexof this buffer- Specified by:
getBytesin interfaceChannelBuffer
-
getBytes
Description copied from interface:ChannelBufferTransfers this buffer's data to the specified destination starting at the specified absoluteindexuntil the destination becomes non-writable. This method is basically same withChannelBuffer.getBytes(int, ChannelBuffer, int, int), except that this method increases thewriterIndexof the destination by the number of the transferred bytes whileChannelBuffer.getBytes(int, ChannelBuffer, int, int)does not. This method does not modifyreaderIndexorwriterIndexof the source buffer (i.e.this).- Specified by:
getBytesin interfaceChannelBuffer
-
getBytes
Description copied from interface:ChannelBufferTransfers 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 thewriterIndexof the destination by the number of the transferred bytes whileChannelBuffer.getBytes(int, ChannelBuffer, int, int)does not. This method does not modifyreaderIndexorwriterIndexof the source buffer (i.e.this).- Specified by:
getBytesin interfaceChannelBuffer- Parameters:
length- the number of bytes to transfer
-
setBytes
public void setBytes(int index, byte[] src) Description copied from interface:ChannelBufferTransfers the specified source array's data to this buffer starting at the specified absoluteindex. This method does not modifyreaderIndexorwriterIndexof this buffer.- Specified by:
setBytesin interfaceChannelBuffer
-
setBytes
Description copied from interface:ChannelBufferTransfers the specified source buffer's data to this buffer starting at the specified absoluteindexuntil the source buffer becomes unreadable. This method is basically same withChannelBuffer.setBytes(int, ChannelBuffer, int, int), except that this method increases thereaderIndexof the source buffer by the number of the transferred bytes whileChannelBuffer.setBytes(int, ChannelBuffer, int, int)does not. This method does not modifyreaderIndexorwriterIndexof the source buffer (i.e.this).- Specified by:
setBytesin interfaceChannelBuffer
-
setBytes
Description copied from interface:ChannelBufferTransfers 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 thereaderIndexof the source buffer by the number of the transferred bytes whileChannelBuffer.setBytes(int, ChannelBuffer, int, int)does not. This method does not modifyreaderIndexorwriterIndexof the source buffer (i.e.this).- Specified by:
setBytesin interfaceChannelBuffer- Parameters:
length- the number of bytes to transfer
-
readByte
public byte readByte()Description copied from interface:ChannelBufferGets a byte at the currentreaderIndexand increases thereaderIndexby1in this buffer.- Specified by:
readBytein interfaceChannelBuffer
-
readBytes
Description copied from interface:ChannelBufferTransfers this buffer's data to a newly created buffer starting at the currentreaderIndexand increases thereaderIndexby the number of the transferred bytes (=length). The returned buffer'sreaderIndexandwriterIndexare0andlengthrespectively.- Specified by:
readBytesin 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:ChannelBufferTransfers this buffer's data to the specified destination starting at the currentreaderIndexand increases thereaderIndexby the number of the transferred bytes (=length).- Specified by:
readBytesin 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:ChannelBufferTransfers this buffer's data to the specified destination starting at the currentreaderIndexand increases thereaderIndexby the number of the transferred bytes (=dst.length).- Specified by:
readBytesin interfaceChannelBuffer
-
readBytes
Description copied from interface:ChannelBufferTransfers this buffer's data to the specified destination starting at the currentreaderIndexuntil the destination becomes non-writable, and increases thereaderIndexby the number of the transferred bytes. This method is basically same withChannelBuffer.readBytes(ChannelBuffer, int, int), except that this method increases thewriterIndexof the destination by the number of the transferred bytes whileChannelBuffer.readBytes(ChannelBuffer, int, int)does not.- Specified by:
readBytesin interfaceChannelBuffer
-
readBytes
Description copied from interface:ChannelBufferTransfers this buffer's data to the specified destination starting at the currentreaderIndexand increases thereaderIndexby the number of the transferred bytes (=length). This method is basically same withChannelBuffer.readBytes(ChannelBuffer, int, int), except that this method increases thewriterIndexof the destination by the number of the transferred bytes (=length) whileChannelBuffer.readBytes(ChannelBuffer, int, int)does not.- Specified by:
readBytesin interfaceChannelBuffer
-
readBytes
Description copied from interface:ChannelBufferTransfers this buffer's data to the specified destination starting at the currentreaderIndexand increases thereaderIndexby the number of the transferred bytes (=length).- Specified by:
readBytesin interfaceChannelBuffer- Parameters:
dstIndex- the first index of the destinationlength- the number of bytes to transfer
-
readBytes
Description copied from interface:ChannelBufferTransfers this buffer's data to the specified destination starting at the currentreaderIndexuntil the destination's position reaches its limit, and increases thereaderIndexby the number of the transferred bytes.- Specified by:
readBytesin interfaceChannelBuffer
-
readBytes
Description copied from interface:ChannelBufferTransfers this buffer's data to the specified stream starting at the currentreaderIndex.- Specified by:
readBytesin 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:ChannelBufferIncreases the currentreaderIndexby the specifiedlengthin this buffer.- Specified by:
skipBytesin interfaceChannelBuffer
-
writeByte
public void writeByte(int value) Description copied from interface:ChannelBufferSets the specified byte at the currentwriterIndexand increases thewriterIndexby1in this buffer. The 24 high-order bits of the specified value are ignored.- Specified by:
writeBytein interfaceChannelBuffer
-
writeBytes
public void writeBytes(byte[] src, int srcIndex, int length) Description copied from interface:ChannelBufferTransfers the specified source array's data to this buffer starting at the currentwriterIndexand increases thewriterIndexby the number of the transferred bytes (=length).- Specified by:
writeBytesin 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:ChannelBufferTransfers the specified source array's data to this buffer starting at the currentwriterIndexand increases thewriterIndexby the number of the transferred bytes (=src.length).- Specified by:
writeBytesin interfaceChannelBuffer
-
writeBytes
Description copied from interface:ChannelBufferTransfers the specified source buffer's data to this buffer starting at the currentwriterIndexuntil the source buffer becomes unreadable, and increases thewriterIndexby the number of the transferred bytes. This method is basically same withChannelBuffer.writeBytes(ChannelBuffer, int, int), except that this method increases thereaderIndexof the source buffer by the number of the transferred bytes whileChannelBuffer.writeBytes(ChannelBuffer, int, int)does not.- Specified by:
writeBytesin interfaceChannelBuffer
-
writeBytes
Description copied from interface:ChannelBufferTransfers the specified source buffer's data to this buffer starting at the currentwriterIndexand increases thewriterIndexby the number of the transferred bytes (=length). This method is basically same withChannelBuffer.writeBytes(ChannelBuffer, int, int), except that this method increases thereaderIndexof the source buffer by the number of the transferred bytes (=length) whileChannelBuffer.writeBytes(ChannelBuffer, int, int)does not.- Specified by:
writeBytesin interfaceChannelBuffer- Parameters:
length- the number of bytes to transfer
-
writeBytes
Description copied from interface:ChannelBufferTransfers the specified source buffer's data to this buffer starting at the currentwriterIndexand increases thewriterIndexby the number of the transferred bytes (=length).- Specified by:
writeBytesin interfaceChannelBuffer- Parameters:
srcIndex- the first index of the sourcelength- the number of bytes to transfer
-
writeBytes
Description copied from interface:ChannelBufferTransfers the specified source buffer's data to this buffer starting at the currentwriterIndexuntil the source buffer's position reaches its limit, and increases thewriterIndexby the number of the transferred bytes.- Specified by:
writeBytesin interfaceChannelBuffer
-
writeBytes
Description copied from interface:ChannelBufferTransfers the content of the specified stream to this buffer starting at the currentwriterIndexand increases thewriterIndexby the number of the transferred bytes.- Specified by:
writeBytesin 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:ChannelBufferReturns 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 modifyreaderIndexorwriterIndexof this buffer.- Specified by:
copyin interfaceChannelBuffer
-
toByteBuffer
Description copied from interface:ChannelBufferConverts 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 modifyreaderIndexorwriterIndexof this buffer.- Specified by:
toByteBufferin interfaceChannelBuffer
-
equals
Description copied from interface:ChannelBufferDetermines 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 returnsfalsefornulland an object which is not an instance ofChannelBuffertype.- Specified by:
equalsin interfaceChannelBuffer- Overrides:
equalsin classObject
-
hashCode
public int hashCode() -
compareTo
- Specified by:
compareToin interfaceComparable<ChannelBuffer>
-
toString
-