序列化的應用

2021-06-06 18:18:25 字數 1817 閱讀 8619

序列化是什麼?我們在程式設計中常常遇到這類問題,如何將物件儲存到永久儲存介質上(一般是硬碟),當程式下一次啟動時在從永久儲存介質上讀取該物件。一般,要整個儲存物件是不可能的,也沒有必要,因為乙個物件不僅有成員變數,也有成員方法,那我們要如何做到這一點,這就是這篇文章所講的技術——序列化!

序列化是將物件的所有特徵儲存起來,以便下次讀取該特徵時可以將該物件還原出來。

乙個物件要序列化,對應的類必須支援可序列化,支援可序列化的類必須有5個要求:(假設我們建立了cgraph類)

1.該類必須從cobject類繼承;

2.過載serialize(carchive& ar)函式;

3.在類的宣告處使用declare_serial(cgraph)宣告該類可序列化;

4.定義乙個不帶引數的建構函式;

5.在原始檔中使用implement_serial(cgraph,cobject,1)實現該類可序列化;(1代表了版本號,寫入物件和讀取物件的版本號必須一致)

下面以乙個例項講解:

1.新建單文件工程,命名為serialize;

2.在工程中新增新類cgraph,其基類為cobject,如下

class cgraph : public cobject                         //1.從cobject繼承

;在該類的原始檔中加入

implement_serial(cgraph,cobject,1)      //5.實現該類可序列化

3.在cgraph類中的帶引數的建構函式中加入:

//originpoint,newpoint,graphtype都是要儲存和使用的成員變數

cgraph::cgraph(cpoint originpoint,cpoint newpoint,int graphtype)

在serialize()中加入:

void cgraph::serialize(carchive& ar)

}在自定義函式ondraw()中加入:

//在檢視類中以一定格式顯示資料

void cgraph::ondraw(cdc* pdc)

}4.在cserializeview類中處理直線和矩形的繪製和顯示:

void cserializeview::onlbuttondown(uint nflags, cpoint point)

void cserializeview::onlbuttonup(uint nflags, cpoint point)

cserializedoc* pdoc = getdocument();//得到文件指標,所有資料存在文件的m_obarray中

//必須在堆中建立資料,或其他長久保持資料的方法

cgraph* pgraph=new cgraph(originpoint,point,graphtype);

pdoc->m_obarray.add(pgraph);

dc.selectobject(poldbrush);

cview::onlbuttonup(nflags, point);

}void cserializeview::online()

void cserializeview::onrentangle()

在該類的ondraw()函式中加入:

void cserializeview::ondraw(cdc* pdc)

5,最後在cserializedoc類中的serialize()加入:

void cserializedoc::serialize(carchive& ar)}}

其中m_obarray是cobarray類變數,它和cptrarray很相識。

這樣,便可以完成儲存和載入物件的功能了。

序列化(序列化)

原書上翻譯為序列化,msdn翻譯為序列化 作用 當需要儲存,或者網路傳輸 remoting時,資料 物件或值 需要序列化 類似於打包傳輸檔案。system.serializableattribute 序列化是指儲存和獲取磁碟檔案 記憶體或其他地方中的物件。在序列化時,所有的例項資料都儲存到儲存介質上...

php關於序列化和反序列化的應用

我作為乙個初學者,感覺這個這個不是很懂什麼意思,最近用到了,就做乙個小總結 我用序列化其實為了方便把許多關聯的資料存在資料表裡,比如 乙個商場優惠活動,某乙個商品 乙個 30元,買兩個 是50 5個是100 正常儲存資料的時候我們乙個乙個儲存是也可以的 但是如果我們使用序列化就不用那麼複雜,將這三個...

樹的序列化與反序列化及應用

我們知道,先序和中序或者後序與中序都可以唯一確定一棵樹,但是先序和後序不行。今有兩個需求 判斷兩棵樹是否元素相等或是否元素對稱。方法1 先序和中序或者中序和後序可以唯一確定一棵樹,那麼我們把他們遍歷生成的特徵序列對比即可判斷。判相等 用遞迴函式,引數是兩棵樹的跟節點,兩個節點採取任意一種遍歷方式,以...