public SlicedByteBuf(ByteBuf buffer, int index, int length) : base(length) { if (index < 0 || index > buffer.Capacity - length) { throw new IndexOutOfRangeException(buffer + ".slice(" + index + ", " + length + ')'); } if (buffer is SlicedByteBuf) { _buffer = ((SlicedByteBuf)buffer)._buffer; _adjustment = ((SlicedByteBuf)buffer)._adjustment + index; } else if (buffer is DuplicatedByteBuf) { _buffer = buffer.Unwrap(); _adjustment = index; } else { _buffer = buffer; _adjustment = index; } _length = length; SetWriterIndex(length); }