AbstractUnpooledSlicedByteBuf(ByteBuf buffer, int index, int length) { super(length); checkSliceOutOfBounds(index, length, buffer); if (buffer instanceof AbstractUnpooledSlicedByteBuf) { this.buffer = ((AbstractUnpooledSlicedByteBuf) buffer).buffer; adjustment = ((AbstractUnpooledSlicedByteBuf) buffer).adjustment + index; } else if (buffer instanceof DuplicatedByteBuf) { this.buffer = buffer.unwrap(); adjustment = index; } else { this.buffer = buffer; adjustment = index; } initLength(length); writerIndex(length); }
@Override public ByteBuf duplicate() { return unwrap().duplicate().setIndex(idx(readerIndex()), idx(writerIndex())); }