Использование boost :: archive с boost :: iostreams для сжатия данных - PullRequest
5 голосов
/ 14 апреля 2011

Я хочу написать сериализованную функцию для класса, который может дополнительно сжимать данные. Я хотел бы использовать средства сжатия, предоставляемые в 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 голосов
/ 18 апреля 2011

Единственный способ сделать это - сначала сжать данные, а затем использовать ar.load_binary и ar.save_binary.Чтобы сжимать данные, вы можете использовать filtering_stream с std :: ostringstream в качестве приемника и соответствующим фильтром сжатия.

Любая причина, по которой вы не хотите понижать сжатие в стеке (то есть создавать свой архивнад потоком сжатия)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...