将数据读取到 streambuf 中,直到其包含指定的定界符。
template< typename SyncReadStream, typename Allocator> std::size_t read_until( SyncReadStream & s, boost::asio::basic_streambuf< Allocator > & b, char delim);
此函数用于将数据读取到指定的 streambuf 中,直到 streambuf 的 get 区域包含指定的定界符。调用将阻塞,直到以下任一条件为真:
此操作是通过对流的 read_some 函数进行零次或多次调用来实现的。如果 streambuf 的 get 区域已包含定界符,则函数会立即返回。
要从中读取数据的流。类型必须支持 SyncReadStream 概念。
一个 streambuf 对象,数据将被读取到其中。
定界符字符。
streambuf 的 get 区域中包含定界符(包括定界符本身)的字节数。
失败时抛出。
在成功的 read_until 操作之后,streambuf 可能包含定界符之后的数据。应用程序通常会将这些数据保留在 streambuf 中,供后续的 read_until 操作进行检查。
读取数据到 streambuf 直到遇到换行符
boost::asio::streambuf b; boost::asio::read_until(s, b, '\n'); std::istream is(&b); std::string line; std::getline(is, line);
在 read_until
操作成功完成后,缓冲区 b
包含定界符
{ 'a', 'b', ..., 'c', '\n', 'd', 'e', ... }
然后调用 std::getline
提取直到并包括换行符(换行符会被丢弃)的数据,因此字符串 line
包含
{ 'a', 'b', ..., 'c' }
剩余数据如下留在缓冲区 b
中:
{ 'd', 'e', ... }
这些数据可能是新行的开头,将被后续的 read_until
操作提取。