首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ByteBuffer视图

ByteBuffer视图
EN

Stack Overflow用户
提问于 2013-03-02 02:04:15
回答 2查看 1.3K关注 0票数 1

您是否知道有任何java.nio.ByteBuffer实现可以包装ByteBuffer实例的数组,使它们看起来像单个实例,而无需将字节复制到新的缓冲区中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-02 02:24:06

java.nio中没有实现,但几乎所有的通道都实现了GatheringByteChannelScatteringByteChannel,它们可以直接读写ByteBuffers的数组。

GatheringByteChannel

long write(ByteBuffer[] srcs)

将给定缓冲区中的字节序列写入此通道。

ScatteringByteChannel

long read(ByteBuffer[] dsts)

将此通道中的字节序列读入给定的缓冲区。

上面的方法也有部分版本,请参阅上面的链接。

NIO的要点是具有尽可能低的开销,并且这种方式(而不是让单独的对象包装缓冲区)不会比简单的数组产生更多的开销。我认为您的用例就是这个和它们的实现的预期用例。

票数 5
EN

Stack Overflow用户

发布于 2013-03-02 02:31:17

在标准Java API中没有这样的接口。Grizzly NIO框架有一个CompositeBuffer,但它使用自己的缓冲区作为包装器:

代码语言:javascript
复制
import org.glassfish.grizzly.Buffer;
import org.glassfish.grizzly.memory.BuffersBuffer;
import org.glassfish.grizzly.memory.CompositeBuffer;    

....

ByteBuffer byteBuffer = ....;
HeapMemoryManager mm = new HeapMemoryManager();
CompositeBuffer buffer = BuffersBuffer.create();
Buffer b = mm.wrap(byteBuffer);
buffer.append(b);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15164068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档