定义:
对象转换为二进制——>序列化
二进制转换为对象——>反序列化
序列化:
Qt中实现对象序列化的类是QDataStream,写二进制到流中
QFile fileout("file.dat"); //创建一个文档
fileout.open(QIODevice::WriteOnly | QIODevice::Text);//打开并只写
QDataStream out(&fileout); //序列化文档
QString outstr("this out string");
out<<outstr;
fileout.close();
反序列化:
从流中读入二进制
QFile filein("file.dat");
filein.open(QIODevice::ReadOnly | QIODevice::Text);
QDataStream in(&filein);
QString instr("this out string");
in>>instr;
filein.close();
使用自定义的类来实现序列化
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
friend QDataStream &operator<<(QDataStream &output, const QWidget &w);
friend QDataStream &operator>>(QDataStream &input, QWidget &w);
private:
Ui::Widget *ui;
};
QDataStream &operator<<(QDataStream &output, const QWidget &w)
{
output<<2;
return output;
}
QDataStream &operator>>(QDataStream &input, QWidget &w)
{
int n = 0;
input>>n;
qDebug()<<n;
return input;
}
使用方法
Widget w;//自定义的类
QFile fileout("file.dat");
fileout.open(QIODevice::WriteOnly | QIODevice::Text);
QDataStream out(&fileout);
out << w;
fileout.close();
QFile filein("file.dat");
filein.open(QIODevice::ReadOnly | QIODevice::Text);
QDataStream in(&filein);
in>>w;
filein.close();