Java多个对象读取同一文件的不同部分

时间:2015-06-05 05:47:12

标签: java java-io

我正在开发一个项目,我将拥有一个二进制文件。该文件被分成多个部分,每个部分代表一个原始值列表。我需要一个解决方案,我可以拥有一组对象,每个对象代表一个文件的一部分。然后,这些集合都保存在"文件中。表示整个文件的对象。

每个集合对象都需要提供对文件的代表部分中每个值的顺序访问。什么方法可以提供最快的数据检索,而无需先将所有数据加载到内存中?

如果同一个"文件"的两个单独的集合也会很好。对象可以通过两个单独的线程访问,但这并不重要。

1 个答案:

答案 0 :(得分:2)

一个好的方法是将解决方案划分为多个层,这里:一个用于文件i / o,将字节映射到Java short和int,另一个用于抽象文件段和整个文件。

java.nio的MappedByteBuffer在"字节数组"之间提供了良好的接口。随机访问文件的内容以及从中获取Java类型数据所需的内容。

正如Kayaman所提到的,FileChannel.map()会返回一个MappedByteBuffer,您可以使用其方法轻松导航。

实现应该利用操作系统功能将内存页面映射到文件页面,实际上只访问文件中你真正访问的内存。 (我最近在Java 8和Linux上使用过它,它在超过单个MappedByteBuffer容量的文件上表现良好。)