C++のiostream感想-その2- †そもそも iostream とか streambuf という名前に惑わされたような気がする。 iostream という名前 †最初が io なので、I/O と関係が深いと思ってしまう。 ところが、実は I/O はあまり関係無い(と思う)。むしろ 強調すべきは stream の方だ。あるいは buffer と 言ってもよいかも知れない。 buffer への data の出し入れを行う 仕掛けが iostream だと思う。I/O の方は読み込み buffer が 空になったり、書き込み buffer が一杯になった時に、 streambuf に「何とかしろ」と言うだけ。実際に streambuf が I/O をやったかどうかなど知ったことではない。 大事なのは 順番が維持されている(stream)ということだ。相手が seekable であれば位置の変更も有り得るが、それでも 順番は維持される。1番目に書かれたものが5番目に送られ 5番目に書かれたものが1番目に送られるなどということはない。 streambuf という名前 †こちらが buffer かと思いきや(確かに buffer はこの class で確保 するのではあるが)、実はこちらが I/O 担当。 この class の役割は、iostream からの 「読み出し buffer が空になったから入力しろ」、 「書き込み buffer が一杯になったから書き出して space を作れ」 という指示に従うだけ。 [18-Nov-2010]と上に書いたのだが、どちらもバッファ。 †
実際 fstream の本体である filebuf は、同じオブジェクトで、いくつでも(一度に一つずつなので何回でもというべきかもしれないが)ファイル実体と結びつけることができる。 |