Cor*_*ker 10 java bytebuffer netty
我遇到了这个问题:在Netty 4.0中创建一个关于从byte []到ByteBuf和ByteBuffer到ByteBuf的转换的ByteBuf.我很想知道转换的另一种方式:
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
Run Code Online (Sandbox Code Playgroud)
我的问题是,我们可以避免一个或两个副本,并使ByteBuffer的内部缓冲区使用ByteBuf的内部缓冲区.
谢谢!
Dev*_*Dev 11
您应该能够使用ByteBuf.nioBuffers().这将返回ByteBuf
作为ByteBuffer对象数组的视图.
在大多数情况下,这个数组只有一个元素,但在一些更复杂的实现中ByteBuf
,可能有多个底层的ByteBuffer对象,并且ByteBuf.nioBuffers()
可以按原样返回它们,而不是像调用它们那样合并它们ByteBuf.nioBuffer()
.
您可以提前告诉使用的数组长度 ByteBuf.nioBufferCount()
归档时间: |
|
查看次数: |
8293 次 |
最近记录: |