C ++几个对象序列化

时间:2012-07-29 19:27:21

标签: c++ file object serialization

所以我对一个对象进行了序列化,但是我遇到了几个问题。 这是代码:

    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    class MyTest
    {
    private:
        string test;
    public:
        MyTest():test(""){};
        void setTest(const string& test) {this->test = test;};
        string getTest() const {return this->test;};
    };
    void writeToFile(const MyTest& m)
    {
        ofstream ofs("data.mbp", ios::app|ios::binary);
        ofs.clear();
        ofs.write((char *)&m, sizeof(m));
        ofs.flush();
        ofs.close();
        return;
    };
    MyTest& readTest(MyTest& m,int num)
    {
        ifstream ifs;
        ifs.open("data.mbp", ios::in|ios::binary);
        for ( int i = 1 ; i <= num ; i++)
            ifs.read((char *)&m, sizeof(m));
        return m;
    }

    int main(int argc,char* argv[])
    {
        MyTest m,t;
        m.setTest("Hello");
        writeToFile(m);
        t.setTest("World");
        writeToFile(t);
        t = readTest(t,1);
        cout << t.getTest() << endl;

        m = readTest(m,2);
        cout << m.getTest() << endl;


        return 0;
    }

问题是我不知道如何在二进制文件中写两个或更多对象,之后我怎么读它们。 有人知道吗?

提前致谢。

2 个答案:

答案 0 :(得分:5)

我建议你使用Boost - Serialization来序列化C ++中的对象:http://www.boost.org/libs/serialization/

答案 1 :(得分:2)

有很多不同的方法可以做到这一点。您需要先选择文件格式。首先考虑XML。复杂数据结构的序列化最好基于一些现有的库而不是从头开始编写。在Inet上搜索这些库。