Java 多个对象读取同一文件的不同部分
Java multiple objects reading different parts of same file
我正在开发一个项目,我将在其中创建一个二进制文件。该文件被分成多个部分,每个部分代表一个原始值列表。我需要一个解决方案,我可以在其中拥有一组对象,每个对象代表文件的一部分。然后,这些集合全部保存在代表整个文件的 "file" 对象中。
每个集合对象都需要提供对文件表示部分中每个值的顺序访问。在不先将所有数据加载到内存的情况下,哪种方法可以提供最快的数据检索?
如果两个单独的线程可以访问相同 "file" 对象的两个单独集合,那也很好,但这并不重要。
一个好的方法是将解决方案分成几层,这里:一层用于文件 i/o,将字节映射到 Java 短裤和整数,另一层用于文件部分的抽象和整个文件。
java.nio 的 MappedByteBuffer 在随机访问文件的 "byte array" 和从中获取 Java 类型数据所需的内容之间提供了良好的接口。
正如 Kayaman 所提到的,FileChannel.map()
returns 一个 MappedByteBuffer,您可以使用它的方法轻松导航。
该实现应利用 OS 功能将内存页面映射到文件页面,实际上只访问文件中您真正在内存中访问的内容。 (我最近将它与 Java 8 和 Linux 一起使用,它在超过单个 MappedByteBuffer 容量的文件上表现良好。)
我正在开发一个项目,我将在其中创建一个二进制文件。该文件被分成多个部分,每个部分代表一个原始值列表。我需要一个解决方案,我可以在其中拥有一组对象,每个对象代表文件的一部分。然后,这些集合全部保存在代表整个文件的 "file" 对象中。
每个集合对象都需要提供对文件表示部分中每个值的顺序访问。在不先将所有数据加载到内存的情况下,哪种方法可以提供最快的数据检索?
如果两个单独的线程可以访问相同 "file" 对象的两个单独集合,那也很好,但这并不重要。
一个好的方法是将解决方案分成几层,这里:一层用于文件 i/o,将字节映射到 Java 短裤和整数,另一层用于文件部分的抽象和整个文件。
java.nio 的 MappedByteBuffer 在随机访问文件的 "byte array" 和从中获取 Java 类型数据所需的内容之间提供了良好的接口。
正如 Kayaman 所提到的,FileChannel.map()
returns 一个 MappedByteBuffer,您可以使用它的方法轻松导航。
该实现应利用 OS 功能将内存页面映射到文件页面,实际上只访问文件中您真正在内存中访问的内容。 (我最近将它与 Java 8 和 Linux 一起使用,它在超过单个 MappedByteBuffer 容量的文件上表现良好。)