|
> ただ、まだ気になることがあるんです。ReadやReadByteで進めるという操作に対して戻す操作がないのが解せません。Seekは任意の位置を指定・・・。明らかにRead等に対になるものではないように思います。Seekというのは、詰まるところ・・・内部ではどういう操作になっているのでしょうか?
昔のレコードプレーヤーを思い浮かべてください。 #何それ?って世代だったらお手上げ(汗
読み込みという行為は原則先頭から最後へ向けての一方通行です。 Seekはレコード針を前(レコードの外側)へ戻すことです。 その間もレコードは同じ回転を同じ方向で続けています。
Dotさんが言われている戻す操作というのは、データが1,2,3だとしたら、"321"を一発で取得することでしょうか? だとしたら、そのような手段や双方向で同じ意味を持つデータを少なくとも私は見た覚えがありません。 特に後者はそもそも"321"という形でデータを作りますし。 逆から読むという概念はあるとは思いますが、データとしては方向が決まっているということです。
#Readに対してDaerっていう命令を昔どっかで見たような気がするが。。。気のせいか。
Seekの内部の挙動ですが、バッファという概念がありますので バッファ内におさまる場合は実質メモリ上でのポインタの移動だと思います。 バッファを越える場合は読みなおすということをしていると思います。
ストリームは、データを100%保持していなくても一部分をデータとして扱う概念です。 メモ帳は大きなファイルを開いたら全部読み終わるまで表示されません。 秀丸などのエディタでは大きなファイルでも一定のサイズを読み込んだらそこで表示され、残りも同じように表示の末尾に追加されていきます。 インターネットは物理的に遅いので大きな動画などはストリームを使い、読み込みの最後まで待たずに見ることができます。
|