1

TCP ソケット経由で大きなファイルを送信しようとするこれら 2 つのブロックのパフォーマンスの違いを知りたいです。それらの効率を説明する多くのリソースを見つけることができませんでした。

A-

byte[] buffer = new byte[1024];
int number;

while ((number = fileInputStream.read(buffer)) != -1) {
socketOutputStream.write(buffer, 0, number);
}

B-

byte mybytearray = new byte[filesize];
os.write(mybytearray);

転送遅延の点でどちらが優れていますか?

また、サイズを 1024 または 65536 に設定した場合の違いは何ですか? それはパフォーマンスにどのように影響しますか。

4

2 に答える 2

4

ファイルの最後のバイトが到着するまでのレイテンシは基本的に同じです。ただし、次の理由により、バッファーがはるかに大きくなりますが、最初の方法をお勧めします。

  1. データの到着早くなります。
  2. ファイル サイズがint.
  3. ファイル全体がメモリに収まるという仮定はないので、
  4. コードを変更することなく、非常に大きなファイルに拡張できます。
于 2012-07-09T08:54:04.890 に答える
1

MTU (Maximum Transmission Unit)サイズは、おそらく 1500 バイト程度です。これは、何をしても、データがこのサイズに分割 (または結合) されることを意味します。512 バイト以上の適切なバッファ サイズであれば、同じ転送速度が得られる可能性があります。

データの送受信方法は、使用する CPU の量に影響します。10 GB などの高速ネットワークを使用しない限り、CPU はネットワークに追いつくことができなくなります。

効率的な方法でコードを書くと、CPU を浪費しないようになります (これは良いことです) が、帯域幅 (およびネットワークの遅延) によって制限される転送速度に大きな違いはありません。

于 2012-07-09T09:08:11.317 に答える