好的。所以我有大量的二进制数据(比如 10GB)分布在一堆不同长度的文件(比如 5000 个)上。
我正在编写一个 Java 应用程序来处理这些数据,并且我希望为数据访问制定一个好的设计。通常会发生这样的事情:
- 一种或另一种方式,在处理过程中将读取所有数据。
- 每个文件(通常)是按顺序读取的,一次只需要几千字节。但是,通常需要同时拥有每个文件的前几千字节,或者同时拥有每个文件的中间几千字节,等等。
- 有时应用程序需要随机访问一两个字节。
目前我正在使用 RandomAccessFile 类来读取字节缓冲区(和 ByteBuffers)。我的最终目标是将数据访问封装到某个类中,这样它就很快了,我再也不用担心它了。基本功能是我将要求它从指定文件中读取数据帧,并且考虑到上述考虑,我希望最小化 I/O 操作。
典型访问示例:
- 给我所有文件的前 10 KB!
- 给我文件 F 的字节 0 到 999,然后给我字节 1 到 1000,然后给我 2 到 1001,等等,等等……
- 给我从某个字节开始的文件 F 中的一兆字节数据!
有什么好的设计建议吗?