Visual C 序列化程式設計 1

2021-04-02 00:10:49 字數 1548 閱讀 5672

序列化是微軟提供的用於對物件進行檔案i/o的一種機制,該機制在框架(frame)/文件(document)/檢視(view) 模式中得到了很好的應用。很多人對什麼是序列化、怎麼使物件具有序列化能力和如何使用序列化功能等問題都不甚明了。本文試圖對序列化做乙個簡單的解釋。由於本人對序列化功能使用的也不多,不足之處敬請諒解。

mfc 框架/文件/檢視結構中的檔案讀寫

cfile是mfc類庫中所有檔案類的基類。所有mfc提供的檔案i/o功能都和這個類有關。很多情況下,大家都喜歡直接呼叫cfile::write/writehuge來寫檔案,呼叫cfile::read/readhuge來讀檔案。這樣的檔案i/o其實和不使用mfc的檔案 i/o沒有什麼區別,甚至和以前的ansi c的檔案i/o也沒有多少差別,所差別的不外乎是呼叫的api不同而已。

//示例**1

int i;

cin >> i;

//here do something to object i

cout << i;

使用這種方式進行i/o的好處時,利用運算子過載功能,可以用乙個語句完成對一系列的物件的讀寫,而不需要區分物件具體的型別。mfc提供了類carchive,實現了運算子《和》的過載,希望按照前面cin和cout 的方式進行檔案i/o。通過和cfile類的配合,不僅僅實現了對簡單型別如int/float等的檔案讀寫,而且實現了對可序列化物件(serializable objects,這個概念後面描述)的檔案讀寫。

一般情況下,使用carchive對物件進行讀操作的過程如下:

//示例**2

//定義檔案物件和檔案異常物件

cfile file;

cfileexception fe;

//以讀方式開啟檔案

if(!file.open(filename,cfile::moderead,&fe))

//構建carchive 物件

carchive ar(&file,carchive::load);

ar >> obj1>>obj2>>obj3...>>objn;

ar.flush();

//讀完畢,關閉檔案流

ar.close();

file.close();

使用carchive對物件進行寫操作的過程如下:

//示例**3

//定義檔案物件和檔案異常物件

cfile file;

cfileexception fe;

//以讀方式開啟檔案

if(!file.open(filename,cfile::modewrite|cfile::modecreate,&fe))

//構建carchive 物件

carchive ar(&file,carchive::store);

ar << obj1<

可見,對於乙個檔案而言,如果檔案內物件的排列順序是固定的,那麼對於檔案讀和寫從形式上只有使用的運算子的不同。在mfc的框架/文件/檢視結構中,乙個文件的內部物件的構成往往是固定的,這種情況下,寫到檔案中時物件在檔案中的布局也是固定的。因此cdocument利用其基類cobject提供的serilize虛函式,實現自動文件的讀寫。

序列化(序列化)

原書上翻譯為序列化,msdn翻譯為序列化 作用 當需要儲存,或者網路傳輸 remoting時,資料 物件或值 需要序列化 類似於打包傳輸檔案。system.serializableattribute 序列化是指儲存和獲取磁碟檔案 記憶體或其他地方中的物件。在序列化時,所有的例項資料都儲存到儲存介質上...

序列化(模型序列化 序列化巢狀)

from rest framework import serializers from meituan.models import merchant,class merchantserializer serializers.modelserializer class meta model merch...

序列化和解序列化

serialize 返回乙個字串,包含著可以儲存於 php 的任何值的位元組流表示。unserialize 可以用此字串來重建原始的變數值。用序列化來儲存物件可以儲存物件中的所有變數。物件中的函式不會被儲存,只有類的名稱。要能夠unserialize 乙個物件,需要定義該物件的類。也就是,如果序列化...