新手指南 序列化篇之一

2021-05-23 02:31:47 字數 2638 閱讀 1465

序列化初步(翻譯)

原著: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)) {

// handle error

return;

第二步:和存檔掛鉤

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

// create archive ...

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

carchive* parchive = null;

trypfile->seektobegin();

uint umode = (breading ? carchive::load : carchive::store);

parchive = new carchive (pfile, umode);

assert (parchive != null);

catch (cexception* pexception)

// handle error

return;

第三步:序列化物件

最後,我們呼叫serialize()函式序列化物件。serialize()函式是我們自己構造的函式,與mfc的cobject::serialize()函式沒有任何關係。因此你也無需將物件從cobject類繼承。我們的serialize()方法需要傳入乙個carchive物件指標,並返回乙個表示狀態的整數。

int cfoo::serialize

(carchive* parchive)

int nstatus = success;

// serialize the object ...

return (nstatus);

1.       從固定儲存中讀取以及向固定儲存中寫入資料都是使用cfoo::serialize()函式。

2.       cfoo::serialize()函式不知道任何關於資料檔案的訪問方式。

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

class cfoo

// construction/destruction

public:

cfoo::cfoo();

virtual cfoo::~cfoo();

// methods

public:

int serialize (carchive* parchive);

// data members

public:

cstring  m_strname;  // employee name

int      m_nid;      // employee id

我們用carchive的流操作《和》分別從存檔中讀取和寫入資料。carchive知道如何序列化簡單型別,比如int ,float ,dword,以及物件型別,比如cstring。存檔也知道它是讀還是寫模式。你可以通過carchive::isstoring()函式來查詢存檔的讀寫模式。cfoo類的序列化方法可以這麼寫:

int cfoo::serialize

(carchive* parchive)

int nstatus = success;

// serialize the object ...

assert (parchive != null);

tryif (parchive->isstoring()) {

// write employee name and id

(*parchive) << m_strname;

(*parchive) << m_nid;

else {

// read employee name and id

(*parchive) >> m_strname;

(*parchive) >> m_nid;

catch (cexception* pexception)

nstatus = error;

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檔案。在本...