serialize

serialize是指從檔案檔案中讀取該對象或向檔案檔案中寫入該對象的函式。

函式原型,函式說明,序列化,作用局限,示例,

函式原型

CObject::Serialize
virtual void Serialize(CArchive&ar);
參數:
ar 被串列化的CArchive對象。

函式說明

從檔案檔案中讀取該對象或向檔案檔案中寫入該對象。
必須為希望串列化的每個類覆蓋Serialize。被覆蓋的Serialize首先必須調用基類的Serialize函式。
在類的聲明中必須使用DECLARE_SERIAL宏,並且在類的執行過程中也必須使用IMPLEMENT_SERIAL宏。
使用CArchive::IsLoading或CArchive::IsStoring函式,用於決定是否裝載或存儲了檔案檔案。
通過CArchive::ReadObject和CArchive::WriteObject來調用Serialize函式。這些函式與CArchive插入操作符()相關聯。
如果要了解有關串列化的例子,請參閱在線上文檔“Visual C++程式設計師指南” 中的“串列化(對象永久化)”。

序列化

1. 該類需要從CObject類派生(可以是間接派生);
2. 在類中進行DECLARE_SERIAL宏定義
3. 類存在有預設的構造函式
4. 類中實現了Serialize()函式,並且在其中調用基類的序列化函式;
5. 使用IMPLEMENT_SERIAL宏指明類名及版本號;

作用局限

序列化簡化了對象的保存和載入,為對象提供了持久性。但是,序列化本身仍具有一定的局限性。由於序列化一次從檔案中載入所有對象,因此,它不適合於大檔案編輯器和資料庫。對於資料庫和大檔案編輯器,它們每次只是從檔案中讀入一部分。此時,就不應該採用文檔的序列化機制來直接讀取和保存檔案了。另外,使用外部檔案格式(預先定義的檔案格式而不是本應用程式定義的檔案格式)的程式一般也不使用文檔的序列化。

示例

請參閱ObList::CObList,了解所有CObject示例中使用的CAge類。
// example for CObject::Serialize
void CFileSerializeDoc::Serialize(CArchive& ar){
if (ar.IsStoring()){
ar << m_sizeDoc; //m_sizeDoc信息序列化到ar
}else{
ar >> m_sizeDoc; //ar序列化到m_sizeDoc
}
m_strokeList.Serialize(ar);//序列化m_strokeList
}

相關詞條

熱門詞條

聯絡我們