- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:URLクラスでのリード時のバッファサイズについて)
URLクラスでのリード時のバッファサイズについて
このQ&Aのポイント
- URLクラスでのリード時のバッファサイズには制約はありません。
- Javaはコーディングどおりにサーバーに要求するため、適切なバッファサイズを選ぶ必要があります。
- ダウンロードする際のネットマナーには一定のルールが存在します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> AとBで、どちらが正しいでしょうか。 どちらかというと、Aです。 > Javaはコーディングどおりに、サーバーに1バイトを要求する というふうには socket (ネットワークの仕組み)は動作しません。 > 実際はJavaのほうでネットアクセスするに最適なサイズでアクセスし じゃないんです。 送り手と受け手がいて、送り手は勝手に好きなサイズを送る。socket は、適当な サイズにばらして送信する(こともある)。受け手は、送られてきたデータをその まま受取る。 こんな感じで動作します。 # 実際には、受診確認があったり、なかったりと細かいことはありますが。 つまり、受ける側では、実際に送られてくるデータのサイズをコントロールできません。 InputStream は、内部にバッファを持ってます。ここには、送ってこられたデータ そのものが入ると考えて下さい。 read() メソッドで指定する「バッファ」には、その内部のバッファから、指定された サイズのデータだけを(内部のバッファが空になるまで)コピーされます。もし、 内部のバッファが空になって、read() メソッドが指定するサイズに達していなければ、 ネットワークからデータを読み込んで、内部のバッファにため込んで、メソッドの引数に コピーをする、ということを繰返します。
お礼
どうもありがとうございました。 socketなるものが介在し、(送り手側の意向にそって)適当なサイズで送信されるのですね。了解しましたー。BUFSIZEの値によっては、トラフィックを増大させたり、占有したりするのではという懸念は払拭されましたー。 送り手の選択する勝手な好きなサイズに、BUFSIZEの値は全く影響を与えない仕組みなのですね。ネットアクセスマナーもsocketまわりの人の問題ですね。 送り手の選択する勝手な好きなサイズとsocketの選択する適当なサイズの常識的な値や、頭10バイトのデータがほしいだけにもかかわらず、送り手側はファイルの全データ分(数十メガ?)を送りつけてくる可能性とかも聞きたくなっちゃうけど、きりないのでやめときます。(^o^) 別の見方があるかもしれないので、しばらくしてから締めまーす。