asio 的缓冲区有三种类型:
buffer:普通缓冲区。大小固定
stream_buffer:流缓冲区
buffer_sequence:由多个 buffer 提供的缓冲区
其中,每种缓冲区都有 const 和 mutable 两种类型。
buffer
创建一个普通 buffer 最简单的方式时使用 asio::buffer
函数,此函数将一块内存区域转换为一个 buffer。
当内存区域大小可变时,可用使用 asio::dynamic_buffer
将 std::vector
转换为一个动态 buffer。
stream_buffer
stream_buffer 派生自 std::basic_stream_buf
。此缓冲区经常用在 TCP 连接或者异步文件中。此缓冲区经常碰到的一个问题是如何转为 string:
asio::streambuf buf;
asio::streambuf::const_buffers_type cbt = buf.data();
std::string data{asio::buffers_begin(cbt), asio::buffers_end(cbt)};
buffer sequence
buffer sequence 是由多个 buffer 组成的 buffer 序列。主要用于 scatter read 和 gather read 中。