@SuppressWarnings("deprecation") private static ByteBuf unwrapSwapped(ByteBuf buf) { if (buf instanceof SwappedByteBuf) { do { buf = buf.unwrap(); } while (buf instanceof SwappedByteBuf); return buf; } return buf; }
UnreleasableByteBuf(ByteBuf buf) { super(buf instanceof UnreleasableByteBuf ? buf.unwrap() : buf); }
@SuppressWarnings("deprecation") private static ByteBuf unwrapSwapped(ByteBuf buf) { if (buf instanceof SwappedByteBuf) { do { buf = buf.unwrap(); } while (buf instanceof SwappedByteBuf); return buf; } return buf; }
UnreleasableByteBuf(ByteBuf buf) { super(buf instanceof UnreleasableByteBuf ? buf.unwrap() : buf); }
public static ByteBuf unwrap(ByteBuf buffer) { ByteBuf parent; while ((parent = buffer.unwrap()) != null && parent != buffer) { // this last part is just in case the semantic // ever changes where unwrap is returning itself buffer = parent; } return buffer; }
@SuppressWarnings("deprecation") private static ByteBuf unwrapSwapped(ByteBuf buf) { if (buf instanceof SwappedByteBuf) { do { buf = buf.unwrap(); } while (buf instanceof SwappedByteBuf); return buf; } return buf; }
UnreleasableByteBuf(ByteBuf buf) { super(buf instanceof UnreleasableByteBuf ? buf.unwrap() : buf); }
public ReadOnlyByteBuf(ByteBuf buffer) { super(buffer.maxCapacity()); if (buffer instanceof ReadOnlyByteBuf || buffer instanceof DuplicatedByteBuf) { this.buffer = buffer.unwrap(); } else { this.buffer = buffer; } setIndex(buffer.readerIndex(), buffer.writerIndex()); }
/** * Encode a {@link CharSequence} in <a href="http://en.wikipedia.org/wiki/UTF-8">UTF-8</a> and write * it into {@code reserveBytes} of a {@link ByteBuf}. * <p> * The {@code reserveBytes} must be computed (ie eagerly using {@link #utf8MaxBytes(CharSequence)} * or exactly with {@link #utf8Bytes(CharSequence)}) to ensure this method to not fail: for performance reasons * the index checks will be performed using just {@code reserveBytes}.<br> * This method returns the actual number of bytes written. */ public static int reserveAndWriteUtf8(ByteBuf buf, CharSequence seq, int reserveBytes) { for (;;) { if (buf instanceof WrappedCompositeByteBuf) { // WrappedCompositeByteBuf is a sub-class of AbstractByteBuf so it needs special handling. buf = buf.unwrap(); } else if (buf instanceof AbstractByteBuf) { AbstractByteBuf byteBuf = (AbstractByteBuf) buf; byteBuf.ensureWritable0(reserveBytes); int written = writeUtf8(byteBuf, byteBuf.writerIndex, seq, seq.length()); byteBuf.writerIndex += written; return written; } else if (buf instanceof WrappedByteBuf) { // Unwrap as the wrapped buffer may be an AbstractByteBuf and so we can use fast-path. buf = buf.unwrap(); } else { byte[] bytes = seq.toString().getBytes(CharsetUtil.UTF_8); buf.writeBytes(bytes); return bytes.length; } } }
public ReadOnlyByteBuf(ByteBuf buffer) { super(buffer.maxCapacity()); if (buffer instanceof ReadOnlyByteBuf || buffer instanceof DuplicatedByteBuf) { this.buffer = buffer.unwrap(); } else { this.buffer = buffer; } setIndex(buffer.readerIndex(), buffer.writerIndex()); }
@SuppressWarnings("deprecation") private Component newComponent(ByteBuf buf, int offset) { if (checkAccessible && buf.refCnt() == 0) { throw new IllegalReferenceCountException(0); } int srcIndex = buf.readerIndex(), len = buf.readableBytes(); ByteBuf slice = null; if (buf instanceof AbstractUnpooledSlicedByteBuf) { srcIndex += ((AbstractUnpooledSlicedByteBuf) buf).idx(0); slice = buf; buf = buf.unwrap(); } else if (buf instanceof PooledSlicedByteBuf) { srcIndex += ((PooledSlicedByteBuf) buf).adjustment; slice = buf; buf = buf.unwrap(); } return new Component(buf.order(ByteOrder.BIG_ENDIAN), srcIndex, offset, len, slice); }
public ReadOnlyByteBuf(ByteBuf buffer) { super(buffer.maxCapacity()); if (buffer instanceof ReadOnlyByteBuf || buffer instanceof DuplicatedByteBuf) { this.buffer = buffer.unwrap(); } else { this.buffer = buffer; } setIndex(buffer.readerIndex(), buffer.writerIndex()); }
@SuppressWarnings("deprecation") private Component newComponent(ByteBuf buf, int offset) { if (checkAccessible && buf.refCnt() == 0) { throw new IllegalReferenceCountException(0); } int srcIndex = buf.readerIndex(), len = buf.readableBytes(); ByteBuf slice = null; if (buf instanceof AbstractUnpooledSlicedByteBuf) { srcIndex += ((AbstractUnpooledSlicedByteBuf) buf).idx(0); slice = buf; buf = buf.unwrap(); } else if (buf instanceof PooledSlicedByteBuf) { srcIndex += ((PooledSlicedByteBuf) buf).adjustment; slice = buf; buf = buf.unwrap(); } return new Component(buf.order(ByteOrder.BIG_ENDIAN), srcIndex, offset, len, slice); }
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); }
DuplicatedByteBuf(ByteBuf buffer, int readerIndex, int writerIndex) { super(buffer.maxCapacity()); if (buffer instanceof DuplicatedByteBuf) { this.buffer = ((DuplicatedByteBuf) buffer).buffer; } else if (buffer instanceof AbstractPooledDerivedByteBuf) { this.buffer = buffer.unwrap(); } else { this.buffer = buffer; } setIndex(readerIndex, writerIndex); markReaderIndex(); markWriterIndex(); }
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); }
DuplicatedByteBuf(ByteBuf buffer, int readerIndex, int writerIndex) { super(buffer.maxCapacity()); if (buffer instanceof DuplicatedByteBuf) { this.buffer = ((DuplicatedByteBuf) buffer).buffer; } else if (buffer instanceof AbstractPooledDerivedByteBuf) { this.buffer = buffer.unwrap(); } else { this.buffer = buffer; } setIndex(readerIndex, writerIndex); markReaderIndex(); markWriterIndex(); }
DuplicatedByteBuf(ByteBuf buffer, int readerIndex, int writerIndex) { super(buffer.maxCapacity()); if (buffer instanceof DuplicatedByteBuf) { this.buffer = ((DuplicatedByteBuf) buffer).buffer; } else if (buffer instanceof AbstractPooledDerivedByteBuf) { this.buffer = buffer.unwrap(); } else { this.buffer = buffer; } setIndex(readerIndex, writerIndex); markReaderIndex(); markWriterIndex(); }
@Test public void testDirect() { Buffer buff = Buffer.factory.directBuffer("hello world".getBytes()); assertEquals("hello world", buff.toString()); buff.appendString(" foobar"); assertEquals("hello world foobar", buff.toString()); ByteBuf bb = buff.getByteBuf().unwrap(); assertTrue(bb.isDirect()); assertTrue(bb.release()); try { // Check it's deallocated buff.toString(); fail(); } catch (IllegalReferenceCountException e) { } } }