我似乎无法很好地解释 consumer() 和 commit() 的真正含义,实际上我根本不了解 streambuf。
我的理解是streambuf只是一个字符数组。但是为什么在文档中,
basic_streambuf::data
Get a list of buffers that represents the input sequence.
所以实际上有很多缓冲区?什么是“输入序列”和“输出序列”?这是另外两个缓冲区吗?
下面的代码究竟做了什么?
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.
所以看起来提交实际上将数据从“输出序列”移动到“输入序列”,而没有提及用于存储数据的底层缓冲区!