天天看點

序列化和反序列化

什麼是序列化和反序列化

序列化是将對象狀态轉換為可保持或傳輸的格式的過程。與序列化相對的是反序列化,它将流轉換為對象。這兩個過程結合起來,可以輕松地存儲和傳輸資料。例如,可以序列化一個對象,然後使用 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);

本文轉自linzheng 51CTO部落格,原文連結:http://blog.51cto.com/linzheng/1080769