您好,登錄后才能下訂單哦!
序列化操作的含義顧名思義,即按一定的次序將數據保存到存儲設備中,或者從存儲設備中讀取一定次序的數據,且數據類型要保持一致(即讀出的數據是我知道的類型)。過程知道了,那怎么做呢?
我是借助Qt框架實現的一個簡單的程序。(當然框架把復雜的部分給實現了。如果在你封裝的數據中,意思是非Qt標準的數據類型,那么有必要實現"<<" 和 ">>" 運算子來實現自定義類型的序列化操作)。
具體的實現過程如下:
//order.h
#include <QDataStream>
#include <QDateTime>
#include <QFile>
typedef struct __MY_STRCT
{
QString _name;
unsigned int _id;
}SMY_STRCT;
QDataStream & operator << (QDataStream& out, const SMY_STRCT &data);
QDataStream &operator >> (QDataStream& in, SMY_STRCT &data);
class OrderClsTest
{
public:
OrderClsTest();
void store();
void load();
private:
QDateTime _lastTime;
};
//order.cpp
#include "orderclstest.h"
#include <QDebug>
OrderClsTest::OrderClsTest()
{
store();
}
void OrderClsTest::load()
{
QFile file("./data.dat");
if(!file.open(QIODevice::ReadOnly)) return ;
SMY_STRCT _my_strct;
QDataStream in(&file);
in >> _lastTime >> _my_strct;
file.close();
}
void OrderClsTest::store()
{
QFile file("./data.dat");
if(!file.open(QIODevice::WriteOnly)){ return ;}
_lastTime = QDateTime::currentDateTime();
QDataStream out(&file);
SMY_STRCT _my_strct;
_my_strct._id = 123;
_my_strct._name = "hello";
out << _lastTime << _my_strct;
file.close();
}
QDataStream& operator << (QDataStream &out, const SMY_STRCT &data)
{
out << data._id << data._name;
return out;
}
QDataStream& operator >> (QDataStream &in, SMY_STRCT &data)
{
in >> data._id >> data._name;
return in;
}
int main(int argc, char *argv[])
{
OrderClsTest test;
test.load();
}
是不是很簡單?從事框架開發指導這些就行了,如果你想實現正真意義上的序列化操作,可以參考MFC 的Persistence機制,也就是我的上一個博客。你會見識的很多。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。