この場合、なぜ BufferedReader を使用するのでしょうか?
-
06-09-2019 - |
質問
次のコードで StringReader の周囲に BufferedReader を使用する場合と、StringReader のみを使用する場合の違いは何ですか?両方の例の 2 行目で DOM をロードすると、BufferedReader は必要なくなるように思えます。
InputSource is = new InputSource(new StringReader(html));
Document dom = XMLResource.load(is).getDocument();
VS
InputSource is = new InputSource(new BufferedReader(new StringReader(html)));
Document dom = XMLResource.load(is).getDocument();
解決
この特定のケースでは、何のメリットもありません。一般に、次の 2 つの利点があります。
- とても便利
readLine()
メソッドはでのみ定義されていますBufferedReader
それよりもReader
(ここでは関係ありません) BufferedReader
基礎となるリーダーへの個々の呼び出しが潜在的にコストがかかる場合の IO を削減します (つまり、大きな呼び出しが少ない方が、小さな呼び出しがたくさんあるよりも高速です) - 繰り返しになりますが、StringReader
カット&ペーストは失敗しますか?
他のヒント
編集:以下の私のオリジナルの答え。以下緩衝読者が文字列をラップにStringReaderを、ラップされているので、ここでは関連しないのです。だから、そこに実行すべきバッファリングはません、とBufferedReaderは冗長であるように思われます。あなたは<全角> の最高/一貫性のプラクティスを使用するための引数を作ることができるが、それはかなり希薄になります。
おそらくコピー/ペースト、またはおそらくIDE-駆動リファクタリングの結果すぎ!
BufferedReaderのは、より最適な形で読み込むしようとします。
それはそれは(設定可能な量で)一度にデータの大きなチャンクを読んで、その後、必要に応じて利用できるようになります、です。これは、いくつかのメモリ使用量を犠牲にしてディスク(など)からの読み込みの数を削減します。
のJavadocから引用すると:
製一般的に、各読み出し要求 Readerは、対応する読み取りを引き起こし 根底から形成することが要求 文字またはバイトストリーム。それはあります ラップすることをお勧め 任意のリーダーの周りをBufferedReader READ()操作は高価であってもよく、そのような FileReadersやInputStreamReaderのように
BufferedReaderのバージョンがFileReaderのから読み取るために使用されるいくつかのコードからコピーされた