gpt4 book ai didi

java - 如何从 ByteBuffer 中提取使用过的字节数组?

转载 作者:搜寻专家 更新时间:2023-11-01 02:36:29 27 4
gpt4 key购买 nike

java.nio.ByteBuffer 类有一个 ByteBuffer.array() 方法,但是它返回一个数组,它是缓冲区容量的大小,而不是已用容量。因此,我遇到了一些问题。

我有一个 ByteBuffer,我将其分配为某个大小,然后向其中插入数据。

ByteBuffer oldBuffer = ByteBuffer.allocate(SIZE);
addHeader(oldBuffer, pendingItems);
newBuffer.flip();
oldBuffer.put(newBuffer);
// as of now I am sending everything from oldBuffer
send(address, oldBuffer.array());

我怎样才能只发送 oldBuffer 中正在使用的内容。有没有一种类轮可以做到这一点?

最佳答案

您可以翻转缓冲区,然后用缓冲区的剩余大小创建一个新数组并填充它。

oldBuffer.flip();
byte[] remaining = new byte[oldBuffer.remaining()];
oldBuffer.get(remaining);

使用 flip()Arrays.copyOf 的另一种方式。

oldBuffer.flip();
Arrays.copyOf(oldBuffer.array(), oldBuffer.remaining());

没有flip()

Arrays.copyOf(oldBuffer.array(), oldBuffer.position());

同样如 EJP 所说,如果您有权访问 send(..) 方法,则可以向 send() 方法添加大小和偏移量参数,并避免创建和填充新数组的需要。

关于java - 如何从 ByteBuffer 中提取使用过的字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49289049/

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