Увеличить сериализацию нескольких объектов - PullRequest
4 голосов
/ 06 октября 2010

Я пытаюсь построить модуль персистентности, и я подумываю о сериализации / десериализации класса, который мне нужен для сохранения файла.Возможно ли с помощью сериализации Boost записать несколько объектов в один файл?Как я могу прочитать или перебрать записи в файле?Буферы протокола Google могли бы быть лучше для меня, если бы была хорошая производительность?

Ответы [ 2 ]

4 голосов
/ 06 октября 2010

Библиотека сериализации была бы не очень полезна, если бы она не могла сериализовать несколько объектов. Вы можете найти все ответы, если прочитаете их очень обширную документацию .

0 голосов
/ 07 февраля 2014

Я изучаю Boost, и я думаю, что вы можете использовать сериализацию Boost в качестве файла журнала и продолжать добавлять значения, используя свою логику. Я столкнулся с той же проблемой, и если я не ошибаюсь, ваш код был примерно таким:

#include <iostream>
#include <fstream>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>

int main()  {
    int two=2;

    for(int i=0;i<10;i++)   {

        std::ofstream ofs("table.txt");
        boost::archive::text_oarchive om(ofs);
        om << two;
        two = two+30;
        std::cout<<"\n"<<two;
    }

    return 0;
}

Здесь, когда вы закрываете фигурные скобки (скобки цикла), файл сериализации закрывается. И вы можете увидеть только одно значение, записанное в table.txt, если вы хотите сохранить несколько значений, ваш код должен выглядеть примерно так:

#include <iostream>
#include <fstream>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>

int main()  {
    int two=2;

    {
        std::ofstream ofs("table.txt");
        boost::archive::text_oarchive om(ofs);
        for(int i=0;i<10;i++)   {

            om << two;
            two = two+30;
            std::cout<<"\n"<<two;
        }
    }

    return 0;
}

Здесь вы можете видеть, что фигурные скобки, содержащие boost :: serialization :: text_oarchive, закрываются, только когда я закончу сериализацию результата моей логики.

...