gpt4 book ai didi

java - 将 io.netty.buffer.ByteBuf 转换为 java.nio.ByteBuffer 的有效方法

转载 作者:搜寻专家 更新时间:2023-10-30 21:46:02 30 4
gpt4 key购买 nike

我遇到了这个查询:Create a ByteBuf in Netty 4.0关于从 byte[] 到 ByteBuf 和 ByteBuffer 到 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

我的问题是,我们是否可以避免一个或两个副本,并使 ByteBuffer 的内部缓冲区使用 ByteBuf 的内部缓冲区。

谢谢!

最佳答案

您应该能够使用 ByteBuf.nioBuffers() .这会将 ByteBuf 的 View 作为 ByteBuffer 对象的数组返回。

在大多数情况下,这个数组只有一个元素,但在一些更复杂的 ByteBuf 实现中,可能有多个底层 ByteBuffer 对象和 ByteBuf.nioBuffers() 可以按原样返回它们,而不是像调用 ByteBuf.nioBuffer() 那样合并它们。

您可以使用 ByteBuf.nioBufferCount() 提前知道数组长度是多少

关于java - 将 io.netty.buffer.ByteBuf 转换为 java.nio.ByteBuffer 的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19303982/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com