URLクラスでインターネットアクセスするときに、以下のようにプログラムする場合、望ましいBUFSIZEはあるのでしょうか。

 inputstream.read(byte_buf,offset,BUFSIZE)


 プログラマーは任意のバッファサイズを指定して、なんら問題はない。
 仮に1であっても、実際はJavaのほうでネットアクセスするに最適なサイズでアクセスし、そこから1バイトずつくれるので問題はない。同様にして、メモリの許す限りに大きいバッファサイズも問題はない。


 Javaはコーディングどおりに、サーバーに1バイトを要求するので、ファイルダウンロードする方法としてとんでもないことだ。同様にして、一度に何十メガバイトもの指定もとんでもないことだ。

 
 AとBで、どちらが正しいでしょうか。Bならば、のぞましいバッファサイズと、その根拠を教えてください。通常、ダウンロードするときのネットマナーみたいなものはあるのでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

> AとBで、どちらが正しいでしょうか。



どちらかというと、Aです。


> Javaはコーディングどおりに、サーバーに1バイトを要求する

というふうには socket (ネットワークの仕組み)は動作しません。

> 実際はJavaのほうでネットアクセスするに最適なサイズでアクセスし

じゃないんです。

送り手と受け手がいて、送り手は勝手に好きなサイズを送る。socket は、適当な
サイズにばらして送信する(こともある)。受け手は、送られてきたデータをその
まま受取る。

こんな感じで動作します。

# 実際には、受診確認があったり、なかったりと細かいことはありますが。

つまり、受ける側では、実際に送られてくるデータのサイズをコントロールできません。

InputStream は、内部にバッファを持ってます。ここには、送ってこられたデータ
そのものが入ると考えて下さい。

read() メソッドで指定する「バッファ」には、その内部のバッファから、指定された
サイズのデータだけを(内部のバッファが空になるまで)コピーされます。もし、
内部のバッファが空になって、read() メソッドが指定するサイズに達していなければ、
ネットワークからデータを読み込んで、内部のバッファにため込んで、メソッドの引数に
コピーをする、ということを繰返します。
    • good
    • 0
この回答へのお礼

 どうもありがとうございました。
 
 socketなるものが介在し、(送り手側の意向にそって)適当なサイズで送信されるのですね。了解しましたー。BUFSIZEの値によっては、トラフィックを増大させたり、占有したりするのではという懸念は払拭されましたー。
 送り手の選択する勝手な好きなサイズに、BUFSIZEの値は全く影響を与えない仕組みなのですね。ネットアクセスマナーもsocketまわりの人の問題ですね。

 送り手の選択する勝手な好きなサイズとsocketの選択する適当なサイズの常識的な値や、頭10バイトのデータがほしいだけにもかかわらず、送り手側はファイルの全データ分(数十メガ?)を送りつけてくる可能性とかも聞きたくなっちゃうけど、きりないのでやめときます。(^o^)


 別の見方があるかもしれないので、しばらくしてから締めまーす。

お礼日時:2001/10/19 07:00

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報