2

(非常に大きな)ファイルを開いて、後でいつでも任意のポイントからデータを読み取れるようにしたいのですが、全体をメモリに保持する必要はありません。

これは可能ですか?

ファイルへのハンドルを開きたいのですが、このファイルへの読み取り/書き込みは他になく、後でディスクでファイルを再度検索することなく、任意のオフセットと長さからデータを取得できます。

私は何らかの種類があるだろうと想定していた

1, open handle to file
2, create reader
3, skip reader to X
4, read for Y
5, reset reader to 0
6, return to step 3

最初は私が求めているもののように見えましたが、ドキュメントは、マークした場所からスキップした場所までのコンテンツがメモリに保持されることをBufferedReader.mark示唆していますか?mark, skip, read, reset

ドキュメントから、

マークを保持しながら読み取ることができる文字数の制限。この制限またはそれを超える文字を読み取った後にストリームをリセットしようとすると、失敗する場合があります。入力バッファーのサイズよりも大きな制限値を指定すると、制限以上のサイズの新しいバッファーが割り当てられます。したがって、大きな値は注意して使用する必要があります。

「読み取り」と表示されているので、おそらくスキップすると、この制限にはカウントされません (これは理にかなっています)。そうなってほしくない…

これについてもっと良い方法はありますか?

4

3 に答える 3

6

RandomAccessFileあなたはおそらくクラスを探しています。

于 2013-02-21T01:53:03.250 に答える
1

Another option

If you are using Java 7 it includes a new ByteChannel, SeekableByteChannel. This Channel maintains a current position, so you can read and write from this position. That allows random access positions.

SeekableByteChannel - A SeekableByteChannel extends ByteChannel and allows to maintain and modify the current position on the underlying entity to which it is connected. It has methods to get the size of the underlying entity or truncate it to a given size, if permitted.

于 2013-02-21T02:53:28.957 に答える
0

RandomAccessFile.seek(long position) と FileChannel.position(long position) は、データを読み書きするファイル位置を設定できます。

于 2013-02-21T05:37:07.717 に答える