用istream读取boost basic_stream时出现问题

Problem reading from boost basic_streambuf with an istream

本文关键字:问题 stream istream 读取 boost basic      更新时间:2023-10-16

我有一些问题,从流读取,这是通过一个asyc_read()填充。当在VS中步进我的代码时,我可以看到正确的数据在缓冲区中,但是当我用

读取它时:
std::istream is = std::istream(&buffer_);
unsigned short type;
unsigned short size;
is >> type;
is >> size;

类型和大小变量保持其初始值。不会抛出错误或任何东西。我真的很困惑,为什么这种情况下,我见过类似的代码读取数据到变量在完全相同的方式

编辑:下面是我的async_read代码,它调用了上面的代码:

boost::asio::async_read(socket_,
    buffer_,
    boost::asio::transfer_at_least(4),
    boost::bind(&Session::handleReadBody, this,
    boost::asio::placeholders::error,
    boost::asio::placeholders::bytes_transferred));

如果type保持其初始值,则显然is >> type;失败:检查流(if(is) {...})的状态以确定。

并且,看到您有transfer_at_least(4),我怀疑您正在传输二进制数据,而不是空白分隔的ASCII字符字符串。如果是这种情况,使用read():

int16_t type, size;
data.read(reinterpret_cast<char*>(&type), sizeof type);
data.read(reinterpret_cast<char*>(&size), sizeof size);

但是要注意字节顺序