我正在尝试使用 std::istream 作为数据源。我想将自定义二进制数据放在 istream 的流缓冲区中,以便以后可以从 istream 中检索它。
我已经阅读了关于 boost::asio::streambuf 以及它是如何用来做我想要的,但是使用套接字作为数据源而不是内存缓冲区,这是我想要使用的。
根据我对 documentation 的理解,步骤应该是:
我不知道如何解决第 4 步,所以我不知道即使我朝着正确的方向前进。
描述的步骤是否正确?如果是这样,如何解决第 4 步?
最佳答案
您可以轻松发送任何 std 流,因此您也可以发送 stringstream
。您可以将二进制数据写入字符串流(实际上它只是一个字节数组)。
一些示例:
boost::asio::streambuf request;
std::ostream request_stream(&request);
request_stream.write(&binarydata_buf, sizeof(binarydata_buf));
// or use stream operators: request_stream << "xxx" << yyy;
// Send the request.
boost::asio::write(socket, request);
如果您已经有一个完全填充的 istream(在本例中使用 std::cin 作为虚拟对象):
boost::asio::streambuf request;
std::ostream request_stream(&request);
request_stream << std::cin.rdbuf() << std::flush;
// Send the request.
boost::asio::write(socket, request);
填充 istream 的方法是例如
ostream::write
或 Boost Serialization binary_archive
当然有很多方法可以给猫剥皮,所以在盲目复制之前一定要考虑其他选项。
见 How to send ostream via boost sockets in C++?
关于c++ - 如何手动将数据放入 boost::asio::streambuf 以便稍后使用 std::istream 读取?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6363088/