/** * Returns a {@link PooledDataBuffer} which will be released after consuming by the consumer. * Currently the {@link NettyDataBuffer} is only one implementation of the {@link PooledDataBuffer} * which is exposed to the public API. */ private PooledDataBuffer withNettyDataBufferFactory(ByteBufHttpData data) { return ((NettyDataBufferFactory) delegate).wrap(data.content()); }
/** * Returns a memory-based {@link DataBuffer} which will be garbage-collected. */ private DataBuffer withDataBufferFactory(ByteBufHttpData data) { final byte[] dataArray = ByteBufUtil.getBytes(data.content()); data.release(); return delegate.wrap(dataArray); } }
@Test public void usingDefaultDataBufferFactory_ByteBufHttpData() { final DataBufferFactoryWrapper<?> wrapper = new DataBufferFactoryWrapper<>(new DefaultDataBufferFactory()); final ByteBufHttpData httpData1 = new ByteBufHttpData(Unpooled.wrappedBuffer("abc".getBytes()), false); final DataBuffer buffer = wrapper.toDataBuffer(httpData1); assertThat(buffer).isInstanceOf(DefaultDataBuffer.class); assertThat(httpData1.refCnt()).isZero(); assertThat(buffer.asByteBuffer()).isEqualTo(ByteBuffer.wrap("abc".getBytes())); final HttpData httpData2 = wrapper.toHttpData(buffer); assertThat(httpData2).isInstanceOf(ByteBufHttpData.class); assertThat(((ByteBufHttpData) httpData2).refCnt()).isOne(); assertThat(ByteBufUtil.getBytes(((ByteBufHttpData) httpData2).content())).isEqualTo("abc".getBytes()); }
@Test public void usingDefaultDataBufferFactory_HttpData() { final DataBufferFactoryWrapper<?> wrapper = new DataBufferFactoryWrapper<>(new DefaultDataBufferFactory()); final HttpData httpData1 = HttpData.ofUtf8("abc"); final DataBuffer buffer = wrapper.toDataBuffer(httpData1); assertThat(buffer).isInstanceOf(DefaultDataBuffer.class); assertThat(buffer.asByteBuffer()).isEqualTo(ByteBuffer.wrap("abc".getBytes())); final HttpData httpData2 = wrapper.toHttpData(buffer); assertThat(httpData2).isInstanceOf(ByteBufHttpData.class); assertThat(((ByteBufHttpData) httpData2).refCnt()).isOne(); assertThat(ByteBufUtil.getBytes(((ByteBufHttpData) httpData2).content())).isEqualTo("abc".getBytes()); } }
@Test public void usingNettyDataBufferFactory_ByteBufHttpData() { final DataBufferFactoryWrapper<?> wrapper = new DataBufferFactoryWrapper<>(new NettyDataBufferFactory(UnpooledByteBufAllocator.DEFAULT)); final ByteBufHttpData httpData1 = new ByteBufHttpData(Unpooled.wrappedBuffer("abc".getBytes()), false); final DataBuffer buffer = wrapper.toDataBuffer(httpData1); assertThat(buffer).isInstanceOf(NettyDataBuffer.class); assertThat(((NettyDataBuffer) buffer).getNativeBuffer().refCnt()).isOne(); final HttpData httpData2 = wrapper.toHttpData(buffer); assertThat(httpData2).isInstanceOf(ByteBufHttpData.class); assertThat(((ByteBufHttpData) httpData2).content()) .isEqualTo(((NettyDataBuffer) buffer).getNativeBuffer()); assertThat(((ByteBufHttpData) httpData2).refCnt()).isOne(); }
@Test public void usingNettyDataBufferFactory_HttpData() { final DataBufferFactoryWrapper<?> wrapper = new DataBufferFactoryWrapper<>(new NettyDataBufferFactory(UnpooledByteBufAllocator.DEFAULT)); final HttpData httpData1 = HttpData.ofUtf8("abc"); final DataBuffer buffer = wrapper.toDataBuffer(httpData1); assertThat(buffer).isInstanceOf(NettyDataBuffer.class); assertThat(((NettyDataBuffer) buffer).getNativeBuffer().refCnt()).isOne(); final HttpData httpData2 = wrapper.toHttpData(buffer); assertThat(httpData2).isInstanceOf(ByteBufHttpData.class); assertThat(((ByteBufHttpData) httpData2).content()) .isEqualTo(((NettyDataBuffer) buffer).getNativeBuffer()); assertThat(((ByteBufHttpData) httpData2).refCnt()).isOne(); }