2

read(char[] cbuf)との間を呼び出した場合のパフォーマンスの違いは、 のバッファのサイズがと同じであるFileReaderと仮定した場合です。BufferedReaderBufferedReadercbuf

各文字を読み取るためにネイティブ呼び出しが行われるたびに、 の単純なread()呼び出しが遅くなることを私は知っています。FileReader

read(char[] cbuf)は、の呼び出しに似た 1 つのネイティブ呼び出しだけで文字のサイズをFileReader読み取ります。cbufBufferedReader

read(char[] cbuf)メソッドがFileReadervsで使用されている場合、パフォーマンスに違いはありますかBufferedReader

4

2 に答える 2

4

FileReader の read(char[] cbuf) は、BufferedReader の場合と同様のネイティブ呼び出しを 1 回行うだけで、文字の cbuf サイズを読み取ります。

それは正しくありません。char[]Java配列に読み込むネイティブ呼び出しはありません。FileReader は実際にはInputStreamReader8kFileInputStream.InputStreamReader内部バッファーを実行します。そのため、ファイルは一度に 8k まで読み取られます。

read(char[] cbuf) メソッドがFileReadervsで使用されている場合、パフォーマンスに違いはありますかBufferedReader

BufferedReaderダブルバッファリングが原因でバッファへの読み込みが遅くなるという意見を読むかもしれませんが、それは正しくありません。BufferedReaderこのケースを検出し、可能な場合は直接読み取りを行います。

要するに、違いに気付かないでしょう。

于 2013-03-05T00:00:50.953 に答える
1

計画: BufferedReader はある程度のスペースを消費するため、通常の使用で消費する時間を短縮できます。

ただし、パフォーマンス結果は次のような事項に依存するため、測定してください。

  • 読み取り操作のサイズ、タイミング、および位置(各読み取りがバッファー長を超えてシークするとどうなるでしょうか?);
  • コンピューティング ハードウェア、ネイティブ ソフトウェア、および JVM。
  • アプリケーションのそれらを一般的に予測できるかどうか。
  • (JIT コンパイルやその他のランタイム最適化の利点を得るために) 読み取り操作が予測可能かどうか、バースト性か持続性か。

さらに、パフォーマンス結果の重要性は、アプリケーションの機能要件によって異なります。

ソフトウェアの保守に関する懸念については言及されていませんが、一般的には、ソフトウェアの生涯コストの大部分を考慮する価値があります。同じ機能を再発明するコードよりも、標準ライブラリを使用するコードを維持する方が簡単です。

于 2013-03-04T20:54:51.823 に答える