serialize

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
}