是否可以使用boost::iostreams::filtering_stream
创建双向压缩流?我希望有一个我可以读写的对象,并且在读入和写入时将数据压缩/解压缩。我希望以下内容可以正常工作,但有些东西显然不对 - 在GCC上它抛出,在MSVC上它不会抛出但是错误位在流上设置。
#include <iostream>
#include <sstream>
#include <boost/iostreams/combine.hpp>
#include <boost/iostreams/filter/gzip.hpp>
#include <boost/iostreams/filtering_stream.hpp>
int main()
{
try
{
namespace bio = boost::iostreams;
std::stringstream stream;
bio::filtering_stream<bio::bidirectional> combined;
combined.push(bio::combine(boost::iostreams::gzip_decompressor(), boost::iostreams::gzip_compressor()));
combined.push(stream);
combined << "some data" << 42 << 1.23456;
std::string test;
combined >> test;
std::cout << test;
}
catch(std::exception& e)
{
std::cerr << "Error: " << e.what() << '\n';
}
}
这根本不可能吗?有这种便利是有用的,但如果需要,我可以将读/写部分分成单独的操作。我猜我需要在任何写操作之前调用flush(),但不确定它是如何包装到单个对象中的。