VB.NET對象序列劇本概念剖析
VB.NET編程語言的應(yīng)用,為開發(fā)人員帶來了非常大的好處。其中有很多比較新穎的技術(shù)和功能讓程序員們眼前一亮。這里是一個簡單的控制臺應(yīng)用程序,它通過使用System.Runtime.Serialization名字空間演示了VB.NET對象序列(Object Serialization)。 #t#
什么是對象序列(Object Serialization)?
序列化是把圖式對象轉(zhuǎn)換成為線性字節(jié)序列的過程。字節(jié)序列可以發(fā)送到別處,例如遠(yuǎn)程計算機(jī),然后執(zhí)行序列解碼,這樣就在遠(yuǎn)程主機(jī)內(nèi)存中生成了原來圖式對象的克隆。序列化過程在VB.NET中是十分容易使用的,而且是開放的,每個VB6的程序員都曾經(jīng)自覺或不自覺地使用過序列化。當(dāng)任何ActiveX dll或者ActiveX exe被創(chuàng)建后,都有五個屬性可以設(shè)置,最后一個Persistable屬性就是VB6中的序列化。VB6中序列化的過程不需要用戶認(rèn)知,大部分開發(fā)人員也從來不管序列化做了什么和如何運作。在VB.NET中,有著公共對象庫,每個支持.NET體系的語言都可以通過System.Runtime.Serialization的名字空間來理解和使用VB.NET的序列化特征。
我們在 .NET中做序列化的時候,Runtime這個元數(shù)據(jù)“知道”每個對象在內(nèi)存中的存放規(guī)劃,它有對這些區(qū)域和屬性的定義,這使得VB.NET對象序列自動執(zhí)行,不用對序列化各區(qū)域編寫代碼。
序列化流可以用XML進(jìn)行編碼,或者壓縮成二進(jìn)制數(shù)據(jù)表示。具體格式?jīng)Q定于調(diào)用的格式化對象??刹迦氲母袷交瘜ο笤试S開發(fā)人員使用兩種已提供的格式:binary 和 SOAP,或者自行創(chuàng)建新的格式來進(jìn)行對象的序列化。
序列化可以替代任何流,象MemoryStream、NetStream等,而不僅僅是FileStream。
序列化操作使用到下面的幾個類:
Formatter:負(fù)責(zé)按照指定格式將對象數(shù)據(jù)寫入到輸出流。
ObjectIDGenerator:負(fù)責(zé)創(chuàng)建對象的Ids。它跟蹤已經(jīng)可見的對象,當(dāng)你要求這個對象的ID時,或者返回存在的ID,或者創(chuàng)建一個新ID。
ObjectManager:負(fù)責(zé)跟蹤序列解碼時的對象。
例程說明
這里的例子描述了將內(nèi)存中的VB.NET對象序列操作保存到磁盤的過程。它將創(chuàng)建一個單一連接列表,填充滿數(shù)據(jù),然后序列化到磁盤的文件中。接著列表被解碼,恢復(fù)成內(nèi)存中的一個對象。