0

ファイルから行を読み取るためにBufferedReaderを使用しています。ファイルからすべての行を読み込んだときに、ファイルを最初からもう一度読み直したいのですが、どうすればよいですか? BufferedReader.mark()BufferedReader.reset() が正しく機能していません。これは私のコードです

FileReader fR = new FileReader(this.sTargetPath);
            final BufferedReader vcfBuffer = new BufferedReader(fR);
        //  vcfBuffer.mark(0);
                Boolean nextLine = true;
                while (nextLine) {
                    try {
                        String line = vcfBuffer.readLine();
                        }
                    } catch (IOException e) {
                        nextLine = false;
                    }
                }
            }

            vcfBuffer.reset();

BufferedREADer の位置をリセットするにはどうすればよいですか? 助けてくれてありがとう

4

1 に答える 1

1

mark()のjavadoc には次のように書かれています: (強調は私のものです):

パラメーター:

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

引数に 0 を指定して呼び出すと、リーダーからさらに 1 バイト読み取った時点で、リセットできなくなる可能性があります。

解決策は、ファイルの長さを引数として mark メソッドを呼び出すことです。しかしもちろん、これはメモリ内バッファ内のファイル全体を読み取ることにつながります。それが望ましくない場合は、リーダーを閉じて、新しい BufferedReader を再度開きます。

于 2012-06-03T12:12:20.207 に答える