序列化以及反序列化的实现
struct Body
{
double weight;
double height;
};
//结构体
struct People
{
int age;
Body dBody;//结构体
vector<QString> vecfamily;//vector
//序列化
friend QDataStream &operator<<(QDataStream& input,const People &iteam)
{
//vector 数据类型需要用vector<People>::fromStdVector 转一下
//如果是QList则不需要直接插入
QVector<QString> strvecfamily = QVector<QString>::fromStdVector(iteam.vecfamily);
input << iteam.age << iteam.dBody.height << iteam.dBody.weight\
<< strvecfamily;
return input;
}
//反序列化
friend QDataStream &operator>>(QDataStream& output,People& iteam)
{
QVector<QString> vecfamily;
output >> iteam.age >>iteam.dBody.height >> iteam.dBody.weight >> vecfamily;
iteam.vecfamily = vecfamily.toStdVector();
return output;
}
};
数据的使用
People p1;
p1.age = 12;
p1.dBody.height = 150.8;
p1.dBody.weight = 50;
p1.vecfamily.push_back("sister");
p1.vecfamily.push_back("mother");
p1.vecfamily.push_back("father");
QFile file("./stream.bat");
if(!file.open(QIODevice::WriteOnly))
{
return ;
}
QDataStream input(&file);
input << p1;
file.close();
People p2;
QFile file1("./stream.bat");//.bat文件为二进制文件
if(!file1.open(QIODevice::ReadOnly))
{
return ;
}
QDataStream output(&file1);
output << p2;
file.close(); output >> p2;
qDebug()<<p2.age<<p2.dBody.height<<p2.dBody.weight\
<<p2.vecfamily;//结果12 150.8 50 std::vector("sister", "mother", "father")