gpt4 book ai didi

java - FileChannel 和 FileInputStream 中 read(ByteBuffer) 和 read(byte[]) 的区别

转载 作者:行者123 更新时间:2023-11-30 07:20:03 26 4
gpt4 key购买 nike

我是 NIO 的新手,我发现一篇文章说“基于 block 的传输通常比基于流的传输更有效”。表示read(ByteBuffer)是block-based传输,read(byte[])是stream-based传输。

我想知道这两种方法之间的内部区别是什么。

ps:我也听说block-based transmission是传输字节数组,stream-based transmission是一个字节一个字节的传输。我认为这是错误的,因为 java.io.FileInputStream.read(byte[]) 也传输字节数组。

最佳答案

使 Bytebuffer 更高效的一件事是使用直接内存。这避免了从直接内存复制到 byte[]。如果您只是将数据从一个 channel 复制到另一个 channel ,速度最多可提高 30%。如果您逐字节读取,使用 ByteBuffer 可能会稍微慢一些,因为它有更多的开销来访问每个字节。如果您使用它来读取二进制文件,例如intdouble 它可以更快,因为它可以在一次访问中获取整个值。

关于java - FileChannel 和 FileInputStream 中 read(ByteBuffer) 和 read(byte[]) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14251837/

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