Transfers the specified source buffer's data to this buffer starting at
the current {@code writerIndex} and increases the {@code writerIndex}
by the number of the transferred bytes (= {@code length}). This method
is basically same with {@link #writeBytes(ByteBuf, int, int)},
except that this method increases the {@code readerIndex} of the source
buffer by the number of the transferred bytes (= {@code length}) while
{@link #writeBytes(ByteBuf, int, int)} does not.
If {@code this.writableBytes} is less than {@code length}, {@link #ensureWritable(int)}
will be called in an attempt to expand capacity to accommodate.
@param length the number of bytes to transfer
@throws IndexOutOfBoundsException if {@code length} is greater then {@code src.readableBytes}
Transfers the specified source buffer's data to this buffer starting at the current {@code writerIndex} and increases the {@code writerIndex} by the number of the transferred bytes (= {@code length}). This method is basically same with {@link #writeBytes(ByteBuf, int, int)}, except that this method increases the {@code readerIndex} of the source buffer by the number of the transferred bytes (= {@code length}) while {@link #writeBytes(ByteBuf, int, int)} does not. If {@code this.writableBytes} is less than {@code length}, {@link #ensureWritable(int)} will be called in an attempt to expand capacity to accommodate.
@param length the number of bytes to transfer @throws IndexOutOfBoundsException if {@code length} is greater then {@code src.readableBytes}