2009-06-02 10 views
5

次のコードでStringReaderを使用している場合と、StringReaderのみを使用している場合の違いは何ですか?両方の例の2行目にDOMをロードすると、BufferedReaderは必要ないようですか?この場合、なぜ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(); 
+0

BufferedReaderを使用すると実際にはわずかに遅くなります(コードが複雑になります) –

答えて

18

として、高価であってもよい、私は何のメリットを見ていない任意のリーダーその リード()操作の周り BufferedReaderのをラップする 従って推奨されます。一般的には2つの利点があります。

  • ああ、それほど便利なreadLine()方法のみBufferedReaderではなく、(ここでは無関係)Readerで定義されているが
  • BufferedReaderは(基本的な読者への個々の呼び出しは、潜在的に高価なIOを削減すなわち、チャンクの少ないコールは、多くの小さなコールよりも速い) - 再び、無関係StringReader

カットアンドペーストは失敗しますか?

1

BufferedReaderのバージョンは、FileReaderのから読み取るために使用されるいくつかのコードからコピーされたのですか?

4

編集:私の元の答えは以下のとおりです。この場合、ではありません。これは、バッファリングされたリーダーがStringをラップし、Stringをラップするためです。したがって、実行するバッファリングはなく、BufferedReaderは重複しているようです。 とすることができます。最良の一貫性のあるプラクティスを使用するための議論をしますが、それは非常に難しいでしょう。

おそらく、コピー/ペーストの結果、またはIDE駆動のリファクタリングがあまりにも遠すぎます。

BufferedReaderは、より最適な方法で読み取りを試みます。

つまり、大量のデータを1回で(設定可能な量で)読み込み、必要に応じて利用可能にします。これにより、メモリ使用量を犠牲にして、ディスク(など)からの読み取り回数が減少します。 Javadocから引用し

:一般的に

を、各リーダーが対応するが、基礎となる 文字またはバイトストリームで構成する 要求を読ん原因 で作られたリクエストをお読みください。 例えば、この特定のケースでFileReadersとInputStreamReaderの

+0

これはStringReaderとどのように関係がありますか? ;) –

+0

はい。私はあなたの点を取る。私はそれほど速すぎると答えました:-) –

関連する問題