@Override public ActiveMQBuffer readSlice(final int length) { if ( isPooled ) { ByteBuf fromBuffer = buffer.readSlice(length); ByteBuf newNettyBuffer = Unpooled.buffer(fromBuffer.capacity()); int read = fromBuffer.readerIndex(); int writ = fromBuffer.writerIndex(); fromBuffer.readerIndex(0); fromBuffer.readBytes(newNettyBuffer,0,writ); newNettyBuffer.setIndex(read,writ); ActiveMQBuffer returnBuffer = new ChannelBufferWrapper(newNettyBuffer,releasable,false); returnBuffer.setIndex(read,writ); return returnBuffer; } return new ChannelBufferWrapper(buffer.readSlice(length), releasable, isPooled); }
@Override public ActiveMQBuffer readSlice(final int length) { if ( isPooled ) { ByteBuf fromBuffer = buffer.readSlice(length); ByteBuf newNettyBuffer = Unpooled.buffer(fromBuffer.capacity()); int read = fromBuffer.readerIndex(); int writ = fromBuffer.writerIndex(); fromBuffer.readerIndex(0); fromBuffer.readBytes(newNettyBuffer,0,writ); newNettyBuffer.setIndex(read,writ); ActiveMQBuffer returnBuffer = new ChannelBufferWrapper(newNettyBuffer,releasable,false); returnBuffer.setIndex(read,writ); return returnBuffer; } return new ChannelBufferWrapper(buffer.readSlice(length), releasable, isPooled); }
@Override public ActiveMQBuffer readSlice(final int length) { if ( isPooled ) { ByteBuf fromBuffer = buffer.readSlice(length); ByteBuf newNettyBuffer = Unpooled.buffer(fromBuffer.capacity()); int read = fromBuffer.readerIndex(); int writ = fromBuffer.writerIndex(); fromBuffer.readerIndex(0); fromBuffer.readBytes(newNettyBuffer,0,writ); newNettyBuffer.setIndex(read,writ); ActiveMQBuffer returnBuffer = new ChannelBufferWrapper(newNettyBuffer,releasable,false); returnBuffer.setIndex(read,writ); return returnBuffer; } return new ChannelBufferWrapper(buffer.readSlice(length), releasable, isPooled); }
@Override public ActiveMQBuffer readSlice(final int length) { if ( isPooled ) { ByteBuf fromBuffer = buffer.readSlice(length); ByteBuf newNettyBuffer = Unpooled.buffer(fromBuffer.capacity()); int read = fromBuffer.readerIndex(); int writ = fromBuffer.writerIndex(); fromBuffer.readerIndex(0); fromBuffer.readBytes(newNettyBuffer,0,writ); newNettyBuffer.setIndex(read,writ); ActiveMQBuffer returnBuffer = new ChannelBufferWrapper(newNettyBuffer,releasable,false); returnBuffer.setIndex(read,writ); return returnBuffer; } return new ChannelBufferWrapper(buffer.readSlice(length), releasable, isPooled); }
@Override public ActiveMQBuffer readSlice(final int length) { if ( isPooled ) { ByteBuf fromBuffer = buffer.readSlice(length); ByteBuf newNettyBuffer = Unpooled.buffer(fromBuffer.capacity()); int read = fromBuffer.readerIndex(); int writ = fromBuffer.writerIndex(); fromBuffer.readerIndex(0); fromBuffer.readBytes(newNettyBuffer,0,writ); newNettyBuffer.setIndex(read,writ); ActiveMQBuffer returnBuffer = new ChannelBufferWrapper(newNettyBuffer,releasable,false); returnBuffer.setIndex(read,writ); return returnBuffer; } return new ChannelBufferWrapper(buffer.readSlice(length), releasable, isPooled); }
@Override public ActiveMQBuffer readSlice(final int length) { if ( isPooled ) { ByteBuf fromBuffer = buffer.readSlice(length); ByteBuf newNettyBuffer = Unpooled.buffer(fromBuffer.capacity()); int read = fromBuffer.readerIndex(); int writ = fromBuffer.writerIndex(); fromBuffer.readerIndex(0); fromBuffer.readBytes(newNettyBuffer,0,writ); newNettyBuffer.setIndex(read,writ); ActiveMQBuffer returnBuffer = new ChannelBufferWrapper(newNettyBuffer,releasable,false); returnBuffer.setIndex(read,writ); return returnBuffer; } return new ChannelBufferWrapper(buffer.readSlice(length), releasable, isPooled); }
@Override public void write(final ActiveMQBuffer bytes, final boolean sync, final IOCallback callback) throws IOException { if (timedBuffer != null) { bytes.setIndex(0, bytes.capacity()); timedBuffer.addBytes(bytes, sync, callback); } else { final int readableBytes = bytes.readableBytes(); final ByteBuffer buffer = factory.newBuffer(readableBytes); //factory::newBuffer doesn't necessary return a buffer with limit == readableBytes!! buffer.limit(readableBytes); bytes.getBytes(bytes.readerIndex(), buffer); buffer.flip(); writeDirect(buffer, sync, callback); } }
@Override public void write(final ActiveMQBuffer bytes, final boolean sync, final IOCallback callback) throws IOException { if (timedBuffer != null) { bytes.setIndex(0, bytes.capacity()); timedBuffer.addBytes(bytes, sync, callback); } else { final int readableBytes = bytes.readableBytes(); final ByteBuffer buffer = factory.newBuffer(readableBytes); //factory::newBuffer doesn't necessary return a buffer with limit == readableBytes!! buffer.limit(readableBytes); bytes.getBytes(bytes.readerIndex(), buffer); buffer.flip(); writeDirect(buffer, sync, callback); } }
private void simulateRead(ActiveMQBuffer buf) { buf.setIndex(buf.capacity() / 2, buf.capacity() / 2); // ok this is not actually happening during the read process, but changing this shouldn't affect the buffer on copy // this is to exaggerate the isolation on this test buf.writeBytes(new byte[1024]); }
@Override public ActiveMQBuffer readSlice(final int length) { if ( isPooled ) { ByteBuf fromBuffer = buffer.readSlice(length); ByteBuf newNettyBuffer = Unpooled.buffer(fromBuffer.capacity()); int read = fromBuffer.readerIndex(); int writ = fromBuffer.writerIndex(); fromBuffer.readerIndex(0); fromBuffer.readBytes(newNettyBuffer,0,writ); newNettyBuffer.setIndex(read,writ); ActiveMQBuffer returnBuffer = new ChannelBufferWrapper(newNettyBuffer,releasable,false); returnBuffer.setIndex(read,writ); return returnBuffer; } return new ChannelBufferWrapper(buffer.readSlice(length), releasable, isPooled); }
@Test public void testGetBytesILChannelBufferII() throws Exception { LargeMessageControllerImpl buffer = create15BytesSample(); ActiveMQBuffer dstBuffer = ActiveMQBuffers.fixedBuffer(20); dstBuffer.setIndex(0, 5); buffer.getBytes(0, dstBuffer); byte[] compareBytes = new byte[15]; dstBuffer.getBytes(5, compareBytes); validateAgainstSample(compareBytes); }