物件序列化和rtti

2021-09-30 04:42:28 字數 804 閱讀 4055

以前以為序列化和rtti沒什麼關係,其實關係密切。

先說序列化,序列化是將物件轉化成位元組流資料,以便進行資料傳輸和儲存,最簡單的直接的說法就是『存檔』,玩個單機遊戲,玩著玩著存個盤,遊戲裡的主角,npc,地圖各種遊戲元素,以某種方式儲存到檔案中,只不過單說序列化不講介質,從物件變成二進位制資料流,就是序列化。序列化的目的是為了,在將來某個時刻反序列化,從位元組流資料轉化成物件,繼續之前的某個軟體應用。

rtti大致是說,在執行時識別動態型別資訊,沒有rtti,反序列化的過程大致像這樣:

拿到一段位元組資料

分析某個公共頭標識

if identity ==  1 then

obja = new classa

obja.load(剩下的部分)

else if identity == 2 then

objb = new classb

objb.load(...)

end會有一堆的if else,或者switch case,同時還有各種類的new,或者其它什麼。

設計乙個公共基類,也改變不了上面這些局面。當然公共基類對於乙個全面面向對應的應用是很必須的,除非你說服自己不要用物件導向。

有了rtti,就可以做很cool的事情,反序列化其實可以做成這樣:

拿到一段位元組資料

直接生成乙個基類物件指標

丟給系統物件管理器

用rtti識別動態型別丟給各自的管理器或者直接參與邏輯

mfc裡有乙個侷限的實現,具體參見相關文件,我說的侷限是指,我不想用mfc的cobject基類如何指定自己的基類,我如何指定自己的記憶體分配器,我如何定製自己的存檔格式。

物件序列化和反序列化

物件序列化有很多方式,在這裡我只講用xml序列化,我們從開始序列化講起,首先,你要在需要被序列化的類前面寫上 serializable 表示該類的例項可以被序列化,其次在要執行序列化的 去中寫入using system.xml.serialization xml序列化必須的 using system...

物件序列化和反序列化

c 提供三種序列化的方法,與此有關的三個類分別是 binaryserialize soapserialize xmlserialize 以二進位制的序列化和反序列化為例,先建立乙個實體類product。1 serializable 2public class product316 17public ...

JAVA物件序列化和反序列化

org.apache.catalina.session.persistentmanagerpublic class person implements serializable public person string name,integer age getter setter方法省略.overr...