RandomAccessFile Java - 复杂度

4

我正在使用RandomAccessFile在Linux上编写一个处理大量数据的Java程序。

所以我做的是保留许多文件,每个文件包含不同的信息。

当我执行操作时

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次寻找和一次读取?

谢谢!

Matt


我不知道这个问题的答案,但我认为这可能与实现/平台有关,因此说明您使用的操作系统和JVM可能会有所帮助。 - Ian Newson
3个回答

4

查找(Seek)的时间复杂度为 O(1) 或接近 O(1)。它无需运行到文件末尾即可定位到指定位置。


3

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


谢谢您的回复。但我的问题是,当寻找位置时,内部指针是否从文件开头开始,逐字节移动指针(x次),还是直接将指针定位在第x个字节上。 - bachurim09
不,简单来说,它的作用类似于:指针 = x; 当你读取时,它会从硬盘中读取扇区(512字节),其中包含你的字节。 - gulyan

0

seek 几乎不变。将指针定位到第 x 个字节通常类似于数组查找的 O(1),但有时文件在磁盘上是分散的,需要 #-of-fragments 步骤才能找到第 x 个字节。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接