You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从ByteBuffer中提取已使用的字节数组?求一行代码实现方案

一行代码解决ByteBuffer仅发送已使用部分的问题

当然有一行代码的解决方案,分两种场景给你说明:

  • 如果你需要先提取出仅包含已使用数据的字节数组:

    byte[] usedData = java.util.Arrays.copyOfRange(oldBuffer.array(), 0, oldBuffer.position());
    

    这里oldBuffer.position()就是你写入数据后的位置,代表已使用的字节数,copyOfRange会直接从原数组中截取0到该位置的部分,得到仅包含有效数据的新数组。

  • 如果你不想额外复制数组(更高效),直接用ByteBuffer的内置方法配合发送API:

    yourSendChannel.write(oldBuffer.flip());
    

    调用flip()会把缓冲区的limit设置为当前position(已使用数据的末尾),同时把position重置为0,这样后续的write操作就只会读取从0到原position的有效数据,完全符合你的需求,而且避免了数组复制的开销。

注意:如果你的ByteBuffer是直接缓冲区(用allocateDirect()创建的),调用array()会抛出UnsupportedOperationException,这时候第二种方案(用flip())是更通用安全的选择。

内容的提问来源于stack exchange,提问作者flash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:02:44