4

我在处理大量数据的 Linux 上的 Java 程序中使用 RandomAccessFile。

所以我正在做的是我保留了很多文件,每个文件都包含不同的信息。

当我执行动作时

int x=???//some large number
RandomAccessFile rand = new RandomAccessFile("file.txt","r");
rand.seek(x); //the file contains more than x bytes
 byte b = rand.readByte();

程序的复杂性是多少?程序是否在最后 2 行执行 2 个动作?一个用于寻找第 x 个字节,一个用于读取字节?- 换句话说,整个文件位于磁盘上的一个连续位置(如阵列)?还是它会为搜索执行 x 个动作,为读取执行一个动作?

谢谢你

马特

4

3 回答 3

3

Seek 只是定位内部指针,它不会从磁盘读取任何内容。

于 2012-04-16T17:48:56.003 回答
3

Seek 是 O(1) 或接近。它不必通过文件运行到您的位置。

于 2012-04-16T17:50:06.157 回答
0

seek几乎是恒定的。定位指向x第 th 字节的指针通常是 O(1),就像数组查找一样,但有时文件在磁盘上是碎片化的,它可能需要 #-of-fragments 步骤来找到第xth 字节。

于 2012-04-16T17:51:48.613 回答