繁体   English   中英

byte [] Files.readAllBytes()和FileChannels.map之间的区别(ByteBuffer / MappedByteBuffer)

[英]Difference between byte[] Files.readAllBytes(), and FileChannels.map (ByteBuffer/MappedByteBuffer)

我看到了各种基准测试和有关分配的直接/非直接字节缓冲区说明,但是在这些方法上在内存上使用字节时,我找不到关于区别的简单解释。

有人可以照亮吗? 告诉他们不同之处并不难。

谢谢!

readAllBytes将文件的全部内容复制到新的堆上字节数组中,而将文件映射到ByteBuffer则允许访问文件的字节,而无需立即将其全部加载到内存中。 您应该期望从映射的字节缓冲区访问字节会带来一些性能开销,但是另一方面,您可以映射大文件,否则这些文件就无法放入RAM。

您的问题不是真的指定您想要什么样的差异,但是两者的文档非常简单:

Files.readAllBytes(): http ://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#readAllBytes(java.nio.file.Path

FileChannel.map:http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html#map(java.nio.channels.FileChannel.MapMode,%20long,%20long

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM