consumer() と commit() が実際に何を意味するのかについての良い説明が見つからないようです。実際には、streambuf をまったく理解していません。
私の理解では、streambuf は単なる文字配列です。しかし、なぜそれがドキュメントにあるのですか、
basic_streambuf::data
Get a list of buffers that represents the input sequence.
実際には多くのバッファがありますか?そして、「入力シーケンス」と「出力シーケンス」とは何ですか? これらは別の 2 つのバッファーですか?
次のコードは実際に何をしますか?
streambuf b;
size_t size;
size = read( socket, b.prepare( 1024 ) );
b.commit( size );
size = write( socket, b.data() );
b.consume( size );
b.prepare() を呼び出すと、read() がデータを配置するための新しいバッファが割り当てられますか? では、データがそのバッファから基になる streambuf バッファに転送されるのはいつですか? commit()かと思ったのですが、
basic_streambuf::commit
Move characters from the output sequence to the input sequence.
そのため、コミットは実際にデータを「出力シーケンス」から「入力シーケンス」に移動するように見えますが、データを格納するために使用される基礎となるバッファーについて言及することはありません!