boost asio 中的各种buffer
buffer 的种类
boost asio中的buffer 种类可以分为 const buffer、 mutable buffer、sream buffer
另外还有 const_buffer_sequence mutable_buffer_sequence
自由函数有 buffer 、 dynamic_buffer 。
const_buffer mutable_buffer
- const_buffer 和 mutable_buffer 基本上类似于 一个 std::pair<void* , size_t > 这样一个元组(tuple),可以由 asio::buffer 转换而来(详见 自由函数buffer )
- mutable_buffer 可以隐式 转换成 const_buffer ,但是反之却不 亦然。
const/mutable buffer sequence
在IO的读写操作中,会涉及到数据的发散-收敛 操作:
读的时候 ,事先不知道数据的大小,只能先申请一块固定大小的内存,把数据填充到其中,不够的话再申请一块固定大小的内存,再填充数据。。。, 直到读完为止。 是为发散(scatter)
写数据正好相反,可以把多块内存中的数据写到IO 里面,称为收敛(gather )
为此,asio 设计了一种buffer_sequence ,来完成这种操作。
对于 mutable_buffer_sequence, 其包含多个 mutable_buffer, 可以通过迭代器依次便利。
对于 const_buffer_sequence ,也类似。