のmark()
およびメソッドとは何かを知りたいです。どのように使用すればいいですか? Javadoc を読みましたが、初心者なので理解できませんでした。reset()
BufferedReader
ベストアンサー1
mark
ストリームのおよびメソッドreset
は、ストリーム内を後方にジャンプしてデータを再読み取りする方法を提供します。
mark()
を呼び出すと、BufferedReader
その時点から読み取ったデータを内部バッファに保持し始めます。 を呼び出すと、reset()
ストリームのマークされた位置に戻るので、次のread()
s はメモリ内バッファによって満たされます。そのバッファの末尾を超えて読み取ると、シームレスに新しいデータの読み取りに戻ります。 もBufferedInputStream
同様に動作します。
の int パラメータは、後戻りできるmark
最大文字数 ( の場合BufferedReader
) または最大バイト数 ( の場合) を指定します。マークされた位置を超えて読み取るデータが多すぎると、マークが「無効」になり、呼び出しが例外で失敗します。BufferedInputStream
reset()
ちょっとした例:
BufferedReader r = new BufferedReader(new StringReader(
"Happy Birthday to You!\n" +
"Happy Birthday, dear " + System.getProperty("user.name") + "!"));
r.mark(1000); // save the data we are about to read
System.out.println(r.readLine()); // read the first line
r.reset(); // jump back to the marked position
r.mark(1000); // start saving the data again
System.out.println(r.readLine()); // read the first line again
System.out.println(r.readLine()); // read the second line
r.reset(); // jump back to the marked position
System.out.println(r.readLine()); // read the first line one final time
この例では、メソッドを取得するためにStringReader
を でラップしましたが、はすでに とをサポートしています。BufferedReader
readLine()
StringReader
mark
reset
メモリ内データ ソースは通常、 および をサポートしますmark
。reset
これは、すでにすべてのデータがメモリ内にあるため、再度簡単に読み取ることができるためです。ファイル、パイプ、またはネットワーク ソケットから読み取るストリームは、本来は および をサポートしませんmark
が、またはreset
でラップすることで、いつでもその機能を任意のストリームに追加できます。BufferedInputStream
BufferedReader