serialize

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

函式原型

CObject ::Serialize

virtual void Serialize(CArchive&ar);

throw(CMemoryException);

throw(CArchiveException);

throw(CFileException);

參數:

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

}

相關詞條

相關搜尋

熱門詞條

聯絡我們