diff --git a/src/main/java/org/jboss/netty/buffer/ChannelBuffer.java b/src/main/java/org/jboss/netty/buffer/ChannelBuffer.java index c012ccd46d..3453e56a84 100644 --- a/src/main/java/org/jboss/netty/buffer/ChannelBuffer.java +++ b/src/main/java/org/jboss/netty/buffer/ChannelBuffer.java @@ -205,15 +205,24 @@ import java.nio.channels.ScatteringByteChannel; * *

Conversion to existing JDK types

* + *

NIO {@link ByteBuffer}

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

- * In case you need to convert a {@link ChannelBuffer} into - * an {@link InputStream} or an {@link OutputStream}, please refer to - * {@link ChannelBufferInputStream} and {@link ChannelBufferOutputStream}. + * + *

{@link String}

+ * + * Various {@link #toString(String)} methods convert a {@link ChannelBuffer} + * into a {@link String}. Plesae note that {@link #toString()} is not a + * conversion method. + * + *

{@link InputStream} and {@link OutputStream}

+ * + * Please refer to {@link ChannelBufferInputStream} and + * {@link ChannelBufferOutputStream}. * * @author The Netty Project (netty-dev@lists.jboss.org) * @author Trustin Lee (tlee@redhat.com) @@ -626,24 +635,181 @@ public interface ChannelBuffer extends Comparable { */ void setLong(int index, long value); + /** + * Transfers the specified source buffer's data to this buffer starting at + * the specified absolute {@code index} until the destination becomes + * unreadable. This method is basically same with {@link #setBytes(int, ChannelBuffer, int, int)}, + * except that this method advances the {@code readerIndex} of the source + * buffer while {@link #getBytes(int, ChannelBuffer, int, int)} doesn't. + * + * @throws IndexOutOfBoundsException + * if the specified {@code index} is less than {@code 0} or + * if {@code index + dst.writableBytes} is greater than {@code capacity} + */ void setBytes(int index, ChannelBuffer src); + + /** + * Transfers the specified source buffer's data to this buffer starting at + * the specified absolute {@code index}. + * + * @throws IndexOutOfBoundsException + * if the specified {@code index} is less than {@code 0}, + * if the specified {@code srcIndex} is less than {@code 0}, + * if {@code index + length} is greater than {@code capacity}, or + * if {@code srcIndex + length} is greater than {@code src.capacity} + */ void setBytes(int index, ChannelBuffer src, int srcIndex, int length); + + /** + * Transfers the specified source array's data to this buffer starting at + * the specified absolute {@code index}. + * + * @throws IndexOutOfBoundsException + * if the specified {@code index} is less than {@code 0} or + * if {@code index + src.length} is greater than {@code capacity} + */ void setBytes(int index, byte[] src); + + /** + * Transfers the specified source array's data to this buffer starting at + * the specified absolute {@code index}. + * + * @throws IndexOutOfBoundsException + * if the specified {@code index} is less than {@code 0}, + * if the specified {@code srcIndex} is less than {@code 0}, + * if {@code index + length} is greater than {@code capacity}, or + * if {@code srcIndex + length} is greater than {@code src.lenggth} + */ void setBytes(int index, byte[] src, int srcIndex, int length); + + /** + * Transfers the specified source buffer's data to this buffer starting at + * the specified absolute {@code index} until the source buffer's position + * reaches to its limit. + * + * @throws IndexOutOfBoundsException + * if the specified {@code index} is less than {@code 0} or + * if {@code index + src.remaining()} is greater than {@code capacity} + */ void setBytes(int index, ByteBuffer src); + + /** + * Transfers the content of the specified source stream to this buffer + * starting at the specified absolute {@code index}. + * + * @throws IndexOutOfBoundsException + * if the specified {@code index} is less than {@code 0} or + * if {@code index + length} is greater than {@code capacity} + * @throws IOException + * if the specified stream threw an exception during I/O + */ void setBytes(int index, InputStream in, int length) throws IOException; + + /** + * Transfers the content of the specified source channel to this buffer + * starting at the specified absolute {@code index}. + * + * @return the number of bytes read from the specified channel + * + * @throws IndexOutOfBoundsException + * if the specified {@code index} is less than {@code 0} or + * if {@code index + length} is greater than {@code capacity} + * @throws IOException + * if the specified channel threw an exception during I/O + */ int setBytes(int index, ScatteringByteChannel in, int length) throws IOException; + /** + * Fills this buffer with NUL (0x00) starting at the specified + * absolute {@code index}. + * + * @param length the number of NULs to write to the buffer + * + * @throws IndexOutOfBoundsException + * if the specified {@code index} is less than {@code 0} or + * if {@code index + length} is greater than {@code capacity} + */ void setZero(int index, int length); + /** + * Gets a byte at the current {@code readerIndex} and increases + * the {@code readerIndex} by {@code 1} in this buffer. + * + * @throws IndexOutOfBoundsException + * if {@code readerIndex} is not less than {@code writerIndex} + */ byte readByte(); + + /** + * Gets a unsigned byte at the current {@code readerIndex} and increases + * the {@code readerIndex} by {@code 1} in this buffer. + * + * @throws IndexOutOfBoundsException + * if {@code readerIndex + 1} is greater than {@code writerIndex} + */ short readUnsignedByte(); + + /** + * Gets a 16-bit short integer at the current {@code readerIndex} + * and increases the {@code readerIndex} by {@code 2} in this buffer. + * + * @throws IndexOutOfBoundsException + * if {@code readerIndex + 2} is greater than {@code writerIndex} + */ short readShort(); + + /** + * Gets a unsigned 16-bit short integer at the current {@code readerIndex} + * and increases the {@code readerIndex} by {@code 2} in this buffer. + * + * @throws IndexOutOfBoundsException + * if {@code readerIndex + 2} is greater than {@code writerIndex} + */ int readUnsignedShort(); + + /** + * Gets a 24-bit medium integer at the current {@code readerIndex} + * and increases the {@code readerIndex} by {@code 3} in this buffer. + * + * @throws IndexOutOfBoundsException + * if {@code readerIndex + 3} is greater than {@code writerIndex} + */ int readMedium(); + + /** + * Gets a unsigned 24-bit medium integer at the current {@code readerIndex} + * and increases the {@code readerIndex} by {@code 3} in this buffer. + * + * @throws IndexOutOfBoundsException + * if {@code readerIndex + 3} is greater than {@code writerIndex} + */ int readUnsignedMedium(); + + /** + * Gets a 32-bit integer at the current {@code readerIndex} + * and increases the {@code readerIndex} by {@code 4} in this buffer. + * + * @throws IndexOutOfBoundsException + * if {@code readerIndex + 4} is greater than {@code writerIndex} + */ int readInt(); + + /** + * Gets a unsigned 32-bit integer at the current {@code readerIndex} + * and increases the {@code readerIndex} by {@code 4} in this buffer. + * + * @throws IndexOutOfBoundsException + * if {@code readerIndex + 4} is greater than {@code writerIndex} + */ long readUnsignedInt(); + + /** + * Gets a 64-bit integer at the current {@code readerIndex} + * and increases the {@code readerIndex} by {@code 8} in this buffer. + * + * @throws IndexOutOfBoundsException + * if {@code readerIndex + 8} is greater than {@code writerIndex} + */ long readLong(); ChannelBuffer readBytes(int length);