• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:URLクラスでのリード時のバッファサイズについて)

URLクラスでのリード時のバッファサイズについて

このQ&Aのポイント
  • URLクラスでのリード時のバッファサイズには制約はありません。
  • Javaはコーディングどおりにサーバーに要求するため、適切なバッファサイズを選ぶ必要があります。
  • ダウンロードする際のネットマナーには一定のルールが存在します。

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

> AとBで、どちらが正しいでしょうか。 どちらかというと、Aです。 > Javaはコーディングどおりに、サーバーに1バイトを要求する というふうには socket (ネットワークの仕組み)は動作しません。 > 実際はJavaのほうでネットアクセスするに最適なサイズでアクセスし じゃないんです。 送り手と受け手がいて、送り手は勝手に好きなサイズを送る。socket は、適当な サイズにばらして送信する(こともある)。受け手は、送られてきたデータをその まま受取る。 こんな感じで動作します。 # 実際には、受診確認があったり、なかったりと細かいことはありますが。 つまり、受ける側では、実際に送られてくるデータのサイズをコントロールできません。 InputStream は、内部にバッファを持ってます。ここには、送ってこられたデータ そのものが入ると考えて下さい。 read() メソッドで指定する「バッファ」には、その内部のバッファから、指定された サイズのデータだけを(内部のバッファが空になるまで)コピーされます。もし、 内部のバッファが空になって、read() メソッドが指定するサイズに達していなければ、 ネットワークからデータを読み込んで、内部のバッファにため込んで、メソッドの引数に コピーをする、ということを繰返します。

rero2
質問者

お礼

 どうもありがとうございました。    socketなるものが介在し、(送り手側の意向にそって)適当なサイズで送信されるのですね。了解しましたー。BUFSIZEの値によっては、トラフィックを増大させたり、占有したりするのではという懸念は払拭されましたー。  送り手の選択する勝手な好きなサイズに、BUFSIZEの値は全く影響を与えない仕組みなのですね。ネットアクセスマナーもsocketまわりの人の問題ですね。  送り手の選択する勝手な好きなサイズとsocketの選択する適当なサイズの常識的な値や、頭10バイトのデータがほしいだけにもかかわらず、送り手側はファイルの全データ分(数十メガ?)を送りつけてくる可能性とかも聞きたくなっちゃうけど、きりないのでやめときます。(^o^)  別の見方があるかもしれないので、しばらくしてから締めまーす。

関連するQ&A