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つのアクションを実行しますか?1つはx番目のバイトをシークするためのもので、もう1つはバイトを読み取るためのものですか?-言い換えると、ファイル全体がディスク上の1つの連続した場所(配列のように)にありますか?または、シーク用にx個のアクションを実行し、読み取り用に1個のアクションを実行しますか?

ありがとうございました

マット

4

3 に答える 3

3

Seekは内部ポインタを配置するだけで、ディスクからは何も読み取りません。

于 2012-04-16T17:48:56.003 に答える
3

シークはO(1)またはそれに近いです。ファイルを実行して自分の位置に移動する必要はありません。

于 2012-04-16T17:50:06.157 に答える
0

seekほぼ一定です。ポインタをthバイトに配置することは、通常、配列ルックアップのようにO(1)ですが、ファイルがディスク上でフラグメント化される場合があり、 thバイトxを見つけるために#-of-fragmentsステップを実行できます。x

于 2012-04-16T17:51:48.613 に答える