我看到了这个查询: Create a ByteBuf in Netty 4.0 ,关于将byte[]转换为ByteBuf和将ByteBuffer转换为ByteBuf。我很好奇如何进行反向转换:
io.netty.buffer.ByteBuf到java.nio.ByteBuffer 并且如何高效地进行操作,最小化/不进行复制? 我进行了一些阅读,并通过一些试验和错误发现了这种低效的转换方式(需要进行两次复制):
io.netty.buffer.ByteBuf到java.nio.ByteBuffer 并且如何高效地进行操作,最小化/不进行复制? 我进行了一些阅读,并通过一些试验和错误发现了这种低效的转换方式(需要进行两次复制):
// io.netty.handler.codec.http.FullHttpRequest fullHttpRequest;
ByteBuf conByteBuf = fullHttpRequest.content ();
int numReadBytes = conByteBuf.readableBytes ();
conBytes = new byte[numReadBytes];
conByteBuf .readBytes (conBytes); // First Copy
ByteBuffer conByteBuffer = ByteBuffer.allocate (conBytes.length);
conByteBuffer.put (conByteBuf); // Second Copy
我的问题是,我们能否避免复制操作并使ByteBuffer的内部缓冲区使用ByteBuf的内部缓冲区。
谢谢!
ByteBuf.nioBuffers()
或ByteBuf.nioBuffer()
将ByteBuf作为ByteBuffer对象数组或单个ByteBuffer对象的视图返回时,如果释放了ByteBuf会发生什么?由于ByteBuf和ByteBuffer共享底层数据,因此在此情况下创建的ByteBuffer对象似乎会出现问题。 - mcarlinByteBuf.nioBuffer()
会自动将它们合并成一个吗?我可以直接调用它而不是在nioBuffers()
中迭代数组吗? - Dmitry Minkovsky