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

zay*_*tyi 3 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()
Run Code Online (Sandbox Code Playgroud)

但这没有用。任何线索如何做到这一点?

Sam*_*ler 5

你可以试试一个buffer_cast. 下面是一个例子:

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() );
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在 streambuf::data() 上使用 buffer_cast&lt;&gt;() 的这种特殊用法是_not_ 记录的,它起作用的唯一原因是由于当前使用 const_buffers_1 实现了 streambuf::const_buffers_type,除了实现所需的 ConstBufferSequence 概念之外,还实现了 ConvertibleToConstBuffer 概念(作为 const_buffers_1 作为 const_buffer 的适配器的副作用)。当然,它_当前_使用是安全的,但未来可能会以某种方式重新实现 streambuf,使 data() 和 prepare() 返回一个缓冲区列表而不是单个缓冲区。 (3认同)