新手指南 序列化篇之一

2021-04-16 12:29:52 字數 2076 閱讀 2408

序列化初步(翻譯)

原著:http://www.codeproject.com/cpp/serialization_primer1.asp

序列化是從固定儲存介質中讀和寫乙個物件的過程,例如磁碟檔案。序列化乙個物件需要三個要素:

ø乙個描述資料檔案的

cfile物件ø

乙個提供序列化上下文的

carchive物件ø

乙個可以被序列化的物件

第一步:開啟資料檔案

用適當的訪問方式開啟用於儲存序列化資訊的

foo.dat

檔案。在本例中,檔案將以獨佔的可讀寫方式開啟。

// open file "foo.dat"

cfile* pfile = new cfile();

assert (pfile != null);

if (!pfile->open ("foo.dat", cfile::modereadwrite | cfile::shareexclusive))

第二步:和存檔掛鉤

下一步,將乙個

carchive

物件和檔案掛鉤。存檔物件提供乙個與固定儲存間的有效的連線。因此你可以通過從存檔中序列化方式讀寫資料,來取代直接從檔案中讀寫。存檔物件必須知道你是需要通過它讀還是寫資料。在下面的例子中,我們假設是需要寫資料。

// create archive ...

bool breading = false;// ... for writing

carchive* parchive = null;

try

catch (cexception* pexception)

第三步:序列化物件

最後,我們呼叫

serialize()

函式序列化物件。

serialize()

函式是我們自己構造的函式,與

mfc的

cobject::serialize()

函式沒有任何關係。因此你也無需將物件從

cobject

類繼承。我們的

serialize()

方法需要傳入乙個

carchive

物件指標,並返回乙個表示狀態的整數。

int cfoo::serialize

(carchive* parchive)

我們在一分鐘內了解了實際的序列化過程。現在,讓我們認識一下一對要點:

1.從固定儲存中讀取以及向固定儲存中寫入資料都是使用

cfoo::serialize()

函式。2.

cfoo::serialize()

函式不知道任何關於資料檔案的訪問方式。

假設cfoo

表示乙個包含兩個資料成員的雇員記錄。

class cfoo

;

我們用carchive

的流操作

<<

和》分別從存檔中讀取和寫入資料。

carchive

知道如何序列化簡單型別,比如

int ,float ,dword

,以及物件型別,比如

cstring

。存檔也知道它是讀還是寫模式。你可以通過

carchive::isstoring()

函式來查詢存檔的讀寫模式。

cfoo

類的序列化方法可以這麼寫:

int cfoo::serialize

(carchive* parchive)

else

}

catch (cexception* pexception)

return (nstatus);

}

第四步:清除

當我們完成序列化以後,我們應該關閉存檔和資料檔案來清除。

parchive->close();

delete parchive;

pfile->close();

delete pfile();

新手指南 序列化篇之一

序列化初步 翻譯 原著 http www.codeproject.com cpp serialization primer1.asp 序列化是從固定儲存介質中讀和寫乙個物件的過程,例如磁碟檔案。序列化乙個物件需要三個要素 乙個描述資料檔案的cfile物件 乙個提供序列化上下文的carchive物件 ...

新手指南 序列化篇之一

序列化初步 翻譯 原著 http www.codeproject.com cpp serialization primer1.asp 序列化是從固定儲存介質中讀和寫乙個物件的過程,例如磁碟檔案。序列化乙個物件需要三個要素 乙個描述資料檔案的 cfile物件 乙個提供序列化上下文的 carchive物...

新手指南 序列化篇之一

序列化初步 翻譯 原著 序列化是從固定儲存介質中讀和寫乙個物件的過程,例如磁碟檔案。序列化乙個物件需要三個要素 乙個描述資料檔案的cfile物件 乙個提供序列化上下文的carchive物件 乙個可以被序列化的物件 第一步 開啟資料檔案 用適當的訪問方式開啟用於儲存序列化資訊的foo.dat檔案。在本...