所以我做了一个对象的序列化,但我有几个问题。 下面是代码:C++几个对象序列化
#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;
}
的问题是,我不知道如何在二进制文件中写入两个或多个对象,之后我怎么能阅读。 有人知道吗?
在此先感谢。
你做错了第一个地方 - 'std :: string'使用动态分配的内存,并且即使在编写时你也不能处理... :( – 2012-07-29 19:29:15
我必须承认我是一个java开发人员:) – 2012-07-29 19:30:10
您忘记了序列化数据!例如,你的'writetofile'打开一个文件,将* not *序列化的数据写入文件,并刷新并关闭它。你写的数据现在是无稽之谈。 (如果你认为它是合理的,那么回答我:第一个字节包含什么?最后一个字节包含什么?你有* no *想法,因为你从来没有序列化过它!) – 2012-07-29 19:35:54