以前以為序列化和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...