OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • 困ってます
  • 質問No.151958
  • 閲覧数241
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 100% (25/25)

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

 inputstream.read(byte_buf,offset,BUFSIZE)


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


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

 
 AとBで、どちらが正しいでしょうか。Bならば、のぞましいバッファサイズと、その根拠を教えてください。通常、ダウンロードするときのネットマナーみたいなものはあるのでしょうか。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

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

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


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

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

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

じゃないんです。

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

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

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

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

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

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

お礼率 100% (25/25)

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

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


 別の見方があるかもしれないので、しばらくしてから締めまーす。
投稿日時 - 2001-10-19 07:00:42
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ