BufferedReader の mark と reset とは何ですか? 質問する

BufferedReader の mark と reset とは何ですか? 質問する

mark()およびメソッドとは何かを知りたいです。どのように使用すればいいですか? Javadoc を読みましたが、初心者なので理解できませんでした。reset()BufferedReader

ベストアンサー1

markストリームのおよびメソッドresetは、ストリーム内を後方にジャンプしてデータを再読み取りする方法を提供します。

mark()を呼び出すと、BufferedReaderその時点から読み取ったデータを内部バッファに保持し始めます。 を呼び出すと、reset()ストリームのマークされた位置に戻るので、次のread()s はメモリ内バッファによって満たされます。そのバッファの末尾を超えて読み取ると、シームレスに新しいデータの読み取りに戻ります。 もBufferedInputStream同様に動作します。

の int パラメータは、後戻りできるmark最大文字数 ( の場合BufferedReader) または最大バイト数 ( の場合) を指定します。マークされた位置を超えて読み取るデータが多すぎると、マークが「無効」になり、呼び出しが例外で失敗します。BufferedInputStreamreset()

ちょっとした例:

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を でラップしましたが、はすでに とをサポートしています。BufferedReaderreadLine()StringReadermarkresetメモリ内データ ソースは通常、 および をサポートしますmarkresetこれは、すでにすべてのデータがメモリ内にあるため、再度簡単に読み取ることができるためです。ファイル、パイプ、またはネットワーク ソケットから読み取るストリームは、本来は および をサポートしませんmarkが、またはresetでラップすることで、いつでもその機能を任意のストリームに追加できます。BufferedInputStreamBufferedReader

おすすめ記事