6

次のコードで 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();
4

3 に答える 3

19

この特定のケースでは、何のメリットもありません。一般に、次の 2 つの利点があります。

  • oh-so-handyメソッドは、 (ここでは関係ありません)ではなく、でreadLine()のみ定義されています。BufferedReaderReader
  • BufferedReader基礎となるリーダーへの個々の呼び出しが潜在的に高価な場合に IO を削減します (つまり、小さな呼び出しを多くするよりも、チャンキーな呼び出しを少なくすると高速になります)。StringReader

切り貼り失敗?

于 2009-06-02T19:29:56.743 に答える
4

編集:以下の私の元の答え。バッファリングされたリーダーは、String をラップする StringReader をラップしているため、この場合、以下は関係ありません。したがって、バッファリングは実行されず、BufferedReader は冗長に見えます。ベスト/一貫したプラクティスを使用することについて議論することはできますが、それはかなり希薄です.

おそらく、コピー/貼り付けの結果か、IDE 主導のリファクタリングが行き過ぎた可能性があります!

BufferedReader は、より最適な方法で読み取ろうとします。

つまり、(設定可能な量で) 大量のデータを一度に読み取り、必要に応じて利用できるようにします。これにより、ディスク (など) からの読み取り回数が減少しますが、メモリ使用量がいくらか増加します。

Javadoc から引用するには:

一般に、Reader から作成された各読み取り要求により、対応する読み取り要求が基になる文字またはバイト ストリームから作成されます。したがって、FileReaders や InputStreamReaders など、read() 操作にコストがかかる可能性のある Reader を BufferedReader でラップすることをお勧めします。

于 2009-06-02T19:26:34.487 に答える
1

BufferedReader のバージョンは、FileReader から読み取っていたコードからコピーされたものですか?

于 2009-06-02T19:26:28.717 に答える