使用boost :: archive和boost :: iostreams来压缩数据

时间:2011-04-13 22:12:11

标签: c++ serialization boost compression

我想为一个可以选择压缩数据的类编写一个序列化函数。我想使用boost :: iostreams中提供的压缩工具。有谁知道怎么做?

struct X
{
    X() {}

    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    {
        ar & compression;
        if(compression == 0)
        {
            ar & data;
        }
        else if(compression == 1)
        {
            // use boost::iostream compression
            // facilities to serialize data
        }
    }

    int compression;
    std::vector<int> data;
};

1 个答案:

答案 0 :(得分:0)

我能看到的唯一方法是首先压缩数据,然后使用ar.load_binary和ar.save_binary。要压缩数据,可以使用带有std :: ostringstream的filtering_stream作为接收器和适当的压缩过滤器。

您是否有任何理由不想将压缩压缩到堆栈(即通过压缩流构建存档)?