1

それをググって多くの関連記事を読みましたが、ストリームで read メソッドを使用して一度に同じバイト数を読み取る場合と比較して、bufferstream を使用するとどのようにパフォーマンスが向上するかがよくわかりませんでした。私が理解していることから、bufferstreamはソースストリームから一度に多くのバイト数を読み取り、ラウンドトリップを節約します。しかし、これは read(byte[], index, count) を使用するのとどう違うのですか。count = バッファ ストリームを使用して読み取るバイト数と同じです。私がそれを理解するのを手伝ってください。

4

2 に答える 2

5

多くのデータ ソース (ファイルなど) から読み取る場合、操作の最も遅い部分は、多くの場合、個々の読み取り要求の実行です。したがって、重要なのは、「ソース XXX から N バイトのデータをください」という要求の数を減らすことです。

ファイル アクセスの場合、1 MB の読み取りを 10 回行うよりも、10 MB の読み取りを 1 回行う方が効率的である可能性が非常に高くなります。

フードの下でバッファリングが行うことは、あなたが要求するよりも多く読まれることです。

したがって、要求したデータのブロックのみが返されますが、残りはバッファに保存されたままになります。そうすれば、次にデータを要求するときに、必要なデータが既にバッファーにあることが多く、基になるデータ ソースへの要求が少なくて済みます。

通常、先読み動作は、バッファの作成時、または最初の読み取り要求の実行時に最初に実行されることに注意してください。次に、バッファは必要に応じて追加の先読みでそれ自体を補充します。

于 2013-11-11T04:03:03.500 に答える
1

通常、データのストリームを処理する場合、基礎となるトランスポートまたはメディアには定義済みのパケット サイズがあります。これは、1 回のリクエストで読み取ることができるデータの最小量があることを意味します。例 2 バイト読み込んでも 1k パケット受信。

バッファリングされたストリームを使用している場合、2 バイトを要求すると 1K のデータが取得されます。別の 2 バイトを要求すると、別の要求を開始する代わりにバッファから取得されます。

于 2013-11-11T04:14:09.750 に答える