Qt中提供了二进制格式的序列化。对QT中原生的数据类型,例如:QString、QMap、QHash等,不需要做其它额外的操作,利用QDataStream直接就可以序列化到文件中。
//序列化
QFile file("file.dat"); //创建一个文档
file.open(QIODevice::WriteOnly);//打开并只写
QDataStream out(&file); //序列化文档
out << QString("the answer is");//将字符串写入文档中,实际在该文档中为二进制
out << (qint32)42;
//反序列化
QFile file("file.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
QString str;
qint32 a;
in >> str >> a;
对于自定义的数据结构或类,利用QDataStream不能直接实现序列化,我们必须重载<<和>>操作符:
class QSampleData : public QObject
{
public:
QChunnelData();
virtual ~QChunnelData();
QChunnelData& operator=(const QChunnelData &other);
friend QDataStream& operator>>(QDataStream&, QChunnelData&);
friend QDataStream& operator<<(QDataStream&, QChunnelData&);
//定义的数据成员
int m_nType;
QString m_strName;
};
CSampleData::CSampleData()
{
m_nType = 0;
m_strName = "";
}
CSampleData::~CSampleData()
{
}
CSampleData::operator =(const CSampleData& other)
{
m_nType = other.m_nType;
m_strName = other.m_strName;
return *this;
}
QDataStream& operator>>(QDataStream& in, CSampleData& data)
{
in >> data.m_nType >> data.m_strName;
return in;
}
QDataStream& operator<<(QDataStream& out, CSampleData& data)
{
out << data.m_nType << data.m_strName;
return out;
}