使用istream从boost basic_streambuf读取问题

时间:2011-09-13 04:58:27

标签: c++ boost boost-asio

我从使用asyc_read()填充的streambuf读取时遇到了一些问题。单步执行我在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));

1 个答案:

答案 0 :(得分:2)

如果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);

但要注意字节顺序。