自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

VB.NET對(duì)象串行化實(shí)現(xiàn)過(guò)程簡(jiǎn)述

開(kāi)發(fā) 后端
VB.NET對(duì)象串行化的主要過(guò)程可以理解為對(duì)一個(gè)對(duì)象進(jìn)行存儲(chǔ)。而返串行化則是創(chuàng)建一個(gè)新的相等的對(duì)象實(shí)例。而且串行化在VB.NET中還是自動(dòng)的。

我們可以通過(guò)對(duì)VB.NET中的對(duì)象進(jìn)行一系列的操作來(lái)達(dá)到我們的目的。比如VB.NET對(duì)象串行化的實(shí)現(xiàn)就是一個(gè)比較常用的操作步驟。從中我們可以了解到對(duì)象操作在實(shí)際程序代碼中的重要性。#t#

只要我們運(yùn)用對(duì)象,我們就需要存儲(chǔ)它們的表現(xiàn)形式。也許我們暫時(shí)不需要一個(gè)對(duì)象,我們不想讓它散亂地放在內(nèi)存中?;蛘呶覀兛赡苄枰岩粋€(gè)對(duì)象實(shí)例從一個(gè)系統(tǒng)傳送到另一個(gè)系統(tǒng)。

對(duì)于所有這些情況,對(duì)象的狀態(tài)就需要以某種形式來(lái)體現(xiàn),可以以不定的形式保存起來(lái),或者傳送到另一個(gè)系統(tǒng)。通常,我們把對(duì)象的狀態(tài)信息作為一系列數(shù)據(jù)字節(jié)來(lái)存儲(chǔ)。

存儲(chǔ)一個(gè)對(duì)象狀態(tài)的過(guò)程就叫做VB.NET對(duì)象串行化。運(yùn)用這個(gè)狀態(tài)信息來(lái)創(chuàng)建一個(gè)新的、相等的對(duì)象實(shí)例就叫做“反串行化”。在VB6及更早的版本中,你必須編寫(xiě)你自己的邏輯來(lái)執(zhí)行這些操作。盡管有這么多編程工作要做,但串行化在.NET中是自動(dòng)的。

如果你在一個(gè)類的前面放一個(gè)屬性,那么一個(gè)對(duì)象實(shí)例就可以自動(dòng)地被串行化了。你將這個(gè)屬性放置在一個(gè)類的聲明部分,如下: _
Public Class MyClassName

你也可以通過(guò)實(shí)現(xiàn)一個(gè)叫做ISerializable的接口來(lái)串行化一個(gè)對(duì)象,但這種方法更復(fù)雜。在大多數(shù)情況下,運(yùn)用屬性更容易,也很有效。

一旦一個(gè)類被標(biāo)記了屬性,我們就可以存儲(chǔ)它的狀態(tài)了。如果你運(yùn)用另一個(gè)叫做Formatter的類,你可以將一個(gè).NET對(duì)象實(shí)例的狀態(tài)作為一系列字節(jié)存儲(chǔ)起來(lái),可以存儲(chǔ)在磁盤(pán)上或一個(gè)數(shù)據(jù)庫(kù)中,可以運(yùn)用.NET Remoting或消息隊(duì)列從一個(gè)系統(tǒng)傳送到另一個(gè)系統(tǒng)。然后,另外的那個(gè)Formatter類就可以從串行化的狀態(tài)信息“重建”對(duì)象實(shí)例了。

不同類型的VB.NET對(duì)象串行化有不同的Formatter類。BinaryFormatter保存一個(gè)對(duì)象的所有的內(nèi)部狀態(tài),包括私有變量。這就叫做“深串行化(deep serialization)”。XMLFormatter只保存公有屬性和數(shù)據(jù)成員,這個(gè)過(guò)程叫做“淺串行化(shallow serialization)”。還有用于其它目的的formatters。運(yùn)用何種formatter取決于你的對(duì)象是否有重建對(duì)象實(shí)例所必須的內(nèi)部狀態(tài)信息,以及你打算用串行化信息做什么。

Formatter對(duì)象有Serialize和Deserialize方法。Serialize方法有兩個(gè)參數(shù)——一個(gè)放置狀態(tài)信息字節(jié)的對(duì)象流和要被串行化的對(duì)象實(shí)例。Deserizlize方法對(duì)包含狀態(tài)信息字節(jié)的對(duì)象流進(jìn)行處理并將新的重建的對(duì)象實(shí)例作為一個(gè)普通的Object類型返回。然后,我們可以用CType方法將新的實(shí)例轉(zhuǎn)化成適當(dāng)?shù)念愋汀?/p>

因此,要想把你的對(duì)象信息存儲(chǔ)到磁盤(pán)上的一個(gè)文件,你可能需要下面的邏輯:

  1. Dim myFileStream As New _  
  2. FileStream("C:\MyFileName.
    dat", _  
  3. FileMode.CreateNew)  
  4. Dim MyFormatter As New
     BinaryFormatter()  
  5. MyFormatter.Serialize
    (myFileStream, MyObject) 

然后你可以用這個(gè)邏輯來(lái)重建對(duì)象:

  1. Dim myFileStream As New _  
  2. FileStream("C:\MyFileName.dat", _  
  3. FileMode.Open)  
  4. Dim MyFormatter As New 
    BinaryFormatter()  
  5. Dim GenericObject As Object  
  6. GenericObject = _ 
  7. MyFormatter.Deserialize
    (myFileStream)  
  8. Dim MyObject As MyObjectType  
  9. MyObject = CType(GenericObject, 
    MyObjectType) 

這時(shí)候,你就可以用這個(gè)對(duì)象了,它的行為同最初的對(duì)象實(shí)例的行為完全一樣。

有時(shí)侯,VB.NET對(duì)象串行化的過(guò)程是自動(dòng)的。例如,如果把一個(gè)對(duì)象實(shí)例放在一個(gè)消息隊(duì)列上,消息隊(duì)列上的實(shí)際數(shù)據(jù)是由從串行化對(duì)象而來(lái)的狀態(tài)信息字節(jié)組成的。MessageQueue對(duì)象有一個(gè)Formatter屬性來(lái)指定所運(yùn)用的formatter類型。這就簡(jiǎn)化了把一個(gè)對(duì)象放到一個(gè)消息隊(duì)列上的過(guò)程,只需一行代碼:

  1. MessageQueue1.Send
    (objMyObjectInstance, _  
  2. "A tag string for 
    humans to read") 

 

然后,另一個(gè)系統(tǒng)就可以從隊(duì)列上提取狀態(tài)信息,并創(chuàng)建一個(gè)相等的對(duì)象實(shí)例了。那個(gè)系統(tǒng)也必須有一個(gè)MessageQueue對(duì)象,它的Formatter屬性也必須同用來(lái)將信息放到隊(duì)列上的最初的MessageQueue對(duì)象的formatter屬性類型一致。

這有一點(diǎn)復(fù)雜。你需要兩個(gè)步驟:

  1.  MyQueueMessage = _ 
  2. MessageQueue1.Receive
    (ATimeoutValue)  
  3. objMyReconstitutedInstance = _ 
  4. CType(MyQueueMessage.Body, _  
  5. MyObjectsType) 

第一步是從消息隊(duì)列提取VB.NET對(duì)象串行化狀態(tài)信息,第二步是運(yùn)用該信息來(lái)創(chuàng)建新的、相等的對(duì)象實(shí)例。然后,我們就可以像運(yùn)用最初的對(duì)象實(shí)例一樣來(lái)運(yùn)用新的對(duì)象了。

還有更多關(guān)于處理消息隊(duì)列的資料,例如如何來(lái)處理超時(shí)設(shè)定。MSDN上的一篇名為“The Queue Continuum”的文章講述了這方面的一些細(xì)節(jié)。然而,正如你所看到的,將對(duì)象串行化到消息隊(duì)列上以及反串行化來(lái)得到一個(gè)新的對(duì)象實(shí)例是很簡(jiǎn)單的。

責(zé)任編輯:曹凱 來(lái)源: 博客園
相關(guān)推薦

2009-11-02 16:41:55

VB.NET串行化對(duì)象

2010-01-14 18:00:07

VB.NET串行化對(duì)象

2010-01-12 10:48:54

VB.NET LIST

2009-10-20 17:38:20

VB.NET exce

2009-11-04 08:53:57

VB.NET AddH

2009-11-18 11:05:27

PHP串行化

2010-01-07 13:51:50

VB.NET數(shù)組賦值

2010-01-20 18:10:27

VB.NET訪問(wèn)級(jí)別

2010-01-14 17:03:01

VB.NET獲取網(wǎng)卡地

2010-01-21 09:53:55

VB.NET獲取程序運(yùn)

2009-10-09 15:59:41

VB.NET對(duì)象

2009-10-14 13:21:46

VB.NET Acco

2010-01-15 15:03:23

VB.NET對(duì)象變量聲

2010-01-22 18:24:28

VB.NET重構(gòu)

2010-01-15 15:39:14

VB.NET Sub過(guò)

2010-01-19 14:42:43

VB.NET調(diào)用過(guò)程重

2009-10-23 16:43:01

VB.NET繪制圖形

2010-01-12 11:17:21

VB.NET文字特效

2010-01-12 18:05:38

VB.NET對(duì)象

2009-10-30 11:20:54

VB.NET Proc
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)