在 async_read_until 条带化空间后提升从流缓冲区的 asio 读取
Boost asio reading from the streambuffer after async_read_until stripes spaces
所以在我使用 async_read_until
读取直到分隔符之后,缓冲区中还剩下一些额外的数据,我一直在尝试像这样读取它
void Connection::read_left_over(std::string &req, size_t &bytes) {
std::istream_iterator<char> itr(this->input_stream);
std::cout << buffer_.in_avail() << std::endl; // returns the size of the data with spaces
bytes -= size_t(buffer_.in_avail());
req.append(itr, std::istream_iterator<char>());
std::cout << buffer_.in_avail() << std::endl; // returns 0
std::cout << req << std::endl;
}
但问题是被读取的文本被剥离了空格,尽管在读取缓冲区之前说它有一个带空格的数据并且在读取之后 returns 0。有什么原因可以解释为什么发生这种情况,如果有的话,有什么办法可以克服这种情况?
这是 istream 的行为。您可以使用
获得其他行为
std::getline
- 使用
std::streambuf_iterator
- 使用
stream >>
std::noskipws
操纵器(最终在后台调用 stream.unsetf(std::ios::skipws)
)
所以在我使用 async_read_until
读取直到分隔符之后,缓冲区中还剩下一些额外的数据,我一直在尝试像这样读取它
void Connection::read_left_over(std::string &req, size_t &bytes) {
std::istream_iterator<char> itr(this->input_stream);
std::cout << buffer_.in_avail() << std::endl; // returns the size of the data with spaces
bytes -= size_t(buffer_.in_avail());
req.append(itr, std::istream_iterator<char>());
std::cout << buffer_.in_avail() << std::endl; // returns 0
std::cout << req << std::endl;
}
但问题是被读取的文本被剥离了空格,尽管在读取缓冲区之前说它有一个带空格的数据并且在读取之后 returns 0。有什么原因可以解释为什么发生这种情况,如果有的话,有什么办法可以克服这种情况?
这是 istream 的行为。您可以使用
获得其他行为std::getline
- 使用
std::streambuf_iterator
- 使用
stream >>
std::noskipws
操纵器(最终在后台调用stream.unsetf(std::ios::skipws)
)