如何从boost::asio::streambuf获取二进制数据

如何从boost::asio::streambuf获取二进制数据,boost,boost-asio,Boost,Boost Asio,如何将数据从streambuf刷新到文件? 我试过了 read(*socket_, streamBuf, boost::asio::transfer_at_least(694784)) std::istream is(&streamBuf); std::ofstream outfile; outfile.open ("test.exe"); is >> outfile; outfile.close() 但那没用。 你知道怎么做吗?你可以试试。以下是一个例子: boost::

如何将数据从streambuf刷新到文件? 我试过了

read(*socket_, streamBuf, boost::asio::transfer_at_least(694784))
std::istream is(&streamBuf);
std::ofstream outfile;
outfile.open ("test.exe");
is >> outfile;
outfile.close()
但那没用。 你知道怎么做吗?

你可以试试。以下是一个例子:

boost::asio::streambuf buf;
size_t bytes = read( *socket_, buf, boost::asio::transfer_at_least(694784) );
buf.commit( bytes );

std::ofstream outfile( "test.exe" );
outfile << boost::asio::buffer_cast<const char*>( buf.data() );
boost::asio::streambuf buf;
size_t bytes=read(*socket_,buf,boost::asio::transfer_至少(694784));
提交(字节);
标准::流出流文件(“test.exe”);

你能详细说明为什么它不起作用吗?异常、崩溃、无数据?请注意,streambuf::data()上buffer_cast()的这种特殊用法没有记录在案,其工作的唯一原因是streambuf::const_buffers_类型当前使用const_buffers_1实现,除了实现所需的ConstBufferSequence概念,还实现了ConvertibleToConstBuffer概念(作为const_buffers_1作为const_buffer适配器的副作用)。当然,它目前可以安全使用,但将来可能会重新实现streambuf,使data()和prepare()返回一个缓冲区列表,而不是一个缓冲区。@MichalWrobel当然,它现在是以这种方式实现的。返回迭代器。谢谢你的评论。