提问人:DaveM 提问时间:2/2/2018 更新时间:2/2/2018 访问量:199
使用 boost::iostreams::filtering_stream 的双向压缩流
bidirectional zipped stream using boost::iostreams::filtering_stream
问:
是否可以使用 ?我想要一个可以读取和写入的对象,并在读取和写入数据时压缩/解压缩该数据。我希望像下面这样的东西会起作用,但显然有些不对劲 - 在 GCC 上它抛出,在 MSVC 上它不会抛出,但在流上设置了错误位。boost::iostreams::filtering_stream
#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(),但不确定如何将其包装到单个对象中。
答: 暂无答案
评论