【问题标题】:boost::iostream bzip2_decompressor not decompressing file compressed by bzip2_compressorboost::iostream bzip2_decompressor 不解压缩由 bzip2_compressor 压缩的文件
【发布时间】:2015-07-20 12:17:54
【问题描述】:

boost::iostream bzip2_decompressor 不解压缩 bzip2_compressor 压缩的文件

【问题讨论】:

标签: c++ boost boost-filesystem bzip2 boost-iostreams


【解决方案1】:

这是一个简单的独立示例,展示了它的工作原理:

Live On Coliru

#include <iostream>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/bzip2.hpp>
#include <sstream>

namespace io = boost::iostreams;

int main()
{
    std::stringstream ss;

    {
        io::filtering_stream<io::output> of;
        of.push(io::bzip2_compressor{});
        of.push(ss);

        io::copy(std::cin, of);
    }

    std::cout << "Compressed input: " << ss.str().size() << " bytes\n";

    ss.seekg(0ul);
    {
        io::filtering_stream<io::input> if_;
        if_.push(io::bzip2_decompressor{});
        if_.push(ss);

        io::copy(if_, std::cout);
    }
}

在 Coliru 上,它显示它会将自身压缩到 331 个字节,然后再次返回到标准输出

也许您忘记了刷新、非二进制、空白跳过。没有SSCCE,我们无法判断

【讨论】:

  • 这里的 0ul 是什么?我想在写作时做: of.write() 和阅读 if_.read() ?这样我就可以指定要读取的字节数。我想写入一个名为 abc.dat.bz2 的压缩二进制文件,然后再次从中读取 abc.dat.bz2。并且 recFile_ 是 std::ofstream recFile_ 直接写入文件。基础文件 re_baseFile 是 std::ifstream.
  • 添加了 SSCCE。请检查一下。
猜你喜欢
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 2011-09-01
  • 2013-10-30
相关资源
最近更新 更多