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

发布于 2024-11-01 03:42:44 字数 541 浏览 0 评论 0原文

我想为一个可以选择压缩数据的类编写一个序列化函数。我想使用 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;
};

I want to write a serialize function for a class that can optionally compress the data. I would like to use the compression facilities provided in boost::iostreams. Does anyone know how to do this?

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;
};

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

要走就滚别墨迹 2024-11-08 03:42:44

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

您不想将压缩推入堆栈(即在压缩流上构建存档)有什么原因吗?

The only way I can see to do that is compress the data first and then use ar.load_binary and ar.save_binary. To compress the data, you could use a filtering_stream with std::ostringstream as sink and an appropriate compression filter.

Any reason you don't want to push the compression down the stack (that is, build your archive over a compressing stream)?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文