天天看點

序列化和反序列化

什麼是序列化和反序列化

序列化是将對象狀态轉換為可保持或傳輸的格式的過程。與序列化相對的是反序列化,它将流轉換為對象。這兩個過程結合起來,可以輕松地存儲和傳輸資料。例如,可以序列化一個對象,然後使用 http 通過 internet 在用戶端和伺服器之間傳輸該對象。反之,反序列化根據流重新構造對象。此外還可以将對象序列化後儲存到本地,再次運作的時候可以從本地檔案中“恢複”對象到序列化之前的狀态。

序列化是指一個對象的執行個體可以被儲存,儲存成一個二進制串,當然,一旦被儲存成二進制串,那麼也可以儲存成文本串了。

比如,一個計數器,數值為2,我們可以用字元串“2”表示。

如果有個對象,叫做connter,目前值為2,那麼可以序列化成“2”,反向的,也可以從“2”得到值為2的計數器執行個體。

這樣,關機時序列化它,開機時反序列化它,每次開機都是延續的。不會都是從頭開始。

序列化概念的提出和實作,可以使我們的應用程式的設定資訊儲存和讀取更加友善。

序列化有很多好處,比如,在一台機器上産生一個執行個體,初始化完畢,然後可以序列化,通過網絡傳送到另一台機器,然後反序列化,得到對象執行個體,之後再執行某些業務邏輯,得到結果,再序列化,傳回第一台機器,第一台機器得到對象執行個體,得到結果。

這個例子是目前比較先進的“智能代理”的原理。

目前比較熱火的web services使用soap協定,soap協定也是以對象的可序列化為基礎的。

using system.runtime.serialization.formatters.binary;

public class serializationunit

{

/// <summary>

/// 把對象序列化為位元組數組

/// </summary>

public static byte[] serializeobject(object obj)

if (obj == null)

return null;

memorystream ms = new memorystream();

binaryformatter formatter = new binaryformatter();

formatter.serialize(ms, obj);

ms.position = 0;

byte[] bytes = new byte[ms.length];

ms.read(bytes, 0, bytes.length);

ms.close();

return bytes;

}

/// 把位元組數組反序列化成對象

public static object deserializeobject(byte[] bytes)

object obj = null;

if (bytes == null)

return obj;

memorystream ms = new memorystream(bytes);

obj = formatter.deserialize(ms);

繼續閱讀