返信

匿名希望さん,こんばんわ。
拙書お読みいただき,ありがとうございます。

> ウェブのファイルを受信し終えた後、ブラウザは、何故更にreadを...

readとかwriteという動作は通信だけでなく,
ファイルを読み書きする際にも使う一般的な動作です。
それなのに,readやwriteを実行するプログラムの基本的な考え方が
あの本には書いてないですね。(^^;
プログラミングの解説本じゃないので,その辺はお許しください。

なので,read動作を実行するプログラムの基本から書きますね。

まず,基本的な前提ですけど,
1回のreadでデータを全部読み込むことは,ほとんどありません。
そして,データがどのくらいの長さなのか,事前にはわからない,
と仮定することが多いです。
大きなデータを一度に読み込もうとすると,
メモリが大量に必要になるっていう事情が背景にあるからなのですが。

そこで,1回に1バイト分ずつ,あるいは1行分ずつという感じで,
細切れにしてデータをreadします。
そして,read動作を繰り返すと,そのうちにデータの最後尾に達し,
そこで実行したreadの結果として,
OSから「データは終わったよ」という意味の情報が返ってきます。
これでデータの終わりを知るわけです。

データの末尾に「これで終わり」っていう意味の情報入れておいて,
それで終わりを知るっていう方法もありますけど,
画像データなどのバイナリデータを扱うときは,
データの中に「これで終わり」と同じものが入っていたりすると,
面倒なことになりますから,
その方法は今は一般的ではありません。

そうなると,データが終わったよという情報,
(通信の場合は,送信動作が終わって切断したよ,という情報)
が返ってくるまではデータが終わったどうかわからない
っていうことになります。

データの受信が終わったことが分かれば,
もうreadを実行する必要はありませんが,
終わったかどうかが分からないので,
終わりに達するまでreadを繰り返し実行する,
っていうことですね。

こんな説明でわかります?

<code>Only

  • 使用できるHTMLタグ: <code>
  • 文字で図を描く場合に<code>と</code>で囲んでください
画像認証
機械的なスパムメッセージ送信を防止するために画像認証を設けています。ご協力ください。
Image CAPTCHA
Enter the characters shown in the image.