21

クラスBufferedReaderを使用して、バッファー内の行ごとに読み取ります。バッファの最終行を読み込んでいるときに、バッファの先頭から読み直したい。mark()とについて読んだことがreset()ありますが、その使用法はわかりませんが、これから解決するのに役立つとは思いません。

最後の行に到達した後、バッファの先頭から読み取りを開始する方法を知っている人はいますか? ?を使用できるようseek(0)RandomAccessFile

4

3 に答える 3

42

マーク/リセットはあなたが望むものですが、特定のバイト数(バッファサイズ)しかリセットできないため、BufferedReaderでは実際には使用できません。ファイルがそれより大きい場合、機能しません。これを行う「簡単な」方法は (残念ながら) ありませんが、処理するのはそれほど難しくありません。元の FileInputStream へのハンドルが必要なだけです。

FileInputStream fIn = ...;
BufferedReader bRead = new BufferedReader(new InputStreamReader(fIn));

// ... read through bRead ...

// "reset" to beginning of file (discard old buffered reader)
fIn.getChannel().position(0);
bRead = new BufferedReader(new InputStreamReader(fIn));

(注: デフォルトの文字セットを使用することは推奨されません。単純化された例を使用するだけです)。

于 2011-03-24T16:21:30.063 に答える
5

はい、マークとリセットは、使用したい方法です。

// set the mark at the beginning of the buffer
bufferedReader.mark(0);

// read through the buffer here...

// reset to the last mark; in this case, it's the beginning of the buffer
bufferedReader.reset();
于 2011-03-24T15:40:35.987 に答える