2010-06-15 386 views

回答

74

假設你有兩個不同的物理機器上運行兩個應用程序。這兩個應用程序都需要交換兩個應用程序通常使用的數據。這些應用程序彼此交談以與一些介質共享數據,這些介質可以是文件系統,tcp或udp連接或任何其他合適的網絡協議,或者可以是直接的內存數據交換。任何這些媒介只會理解以一系列比特形式描述的數據。因此,當一個應用程序需要向另一個應用程序發送值10時,值10將作爲其二進制表示1010發送,並且您還將傳遞一些描述1010的信息。此元信息也將是一系列的其他應用程序可以容易理解。雖然這很容易。

讓我們看另一個例子,其中這兩個應用程序需要交換更復雜的非原始數據類型。假設他們需要交換類型爲Book的對象,其中Book是應用程序中的自定義類,並且這兩個應用程序都具有Book類型的定義。

public class Book 
{ 
    Book() { } 

    public long BookId { get;set; } 
    public string Author { get;set; } 
    public string Title { get;set; } 
} 

如何在兩個應用程序之間交換類型爲book的對象?爲了能夠在兩個應用程序之間共享對象,您需要能夠將Book對象轉換爲二進制表示。這是序列化進入圖片的地方。

藉助序列化,您可以定義對象如何轉換爲其二進制表示形式。接收應用程序將執行相反的過程,即反序列化,它從二進制表示中構造一個Book對象。

+1

非常感謝你的完整答案。 – 2010-06-15 05:36:26

18

沒有比維基百科更好的解釋。

在計算機科學中,在 數據存儲和傳輸的背景下, 系列化是 轉換數據結構或對象 成比特序列的過程,以便它可以 被存儲在文件或內存緩衝區, 或通過網絡傳輸 連接鏈接將被「復活」 後來在相同或另一臺計算機 環境中。

http://en.wikipedia.org/wiki/Serialization

另外,Serializable屬性不能在方法中使用。 由屬性用法

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Delegate, Inherited = false)] 
+5

問題與Wikipedia的解釋的格式是,從技術上來說,都沒有數據結構和已經對象的比特序列? – davemackey 2015-05-17 01:59:15

+0

哦,你的意思是,他們不是,當你從高級編程語言的角度來看:-) – 2016-08-18 10:43:05

8

序列化表示的是將對象轉換成字節流 的過程。反序列化是 通過字節流創建對象的相反過程。

序列化/反序列化主要用於運輸 對象(例如遠程處理過程中),或持續存在的對象(例如 到文件或數據庫).Serialization可以被定義爲存儲對象的狀態的過程 一個存儲 中。在此過程中,對象的公用和專用字段 以及該類的名稱(包括包含該類的 程序集)將轉換爲 字節的流,然後將其寫入數據流。當 對象隨後被反序列化時,會創建一個原始對象的確切克隆。

更多關於這一點:http://www.allinterview.com/showanswers/20627.html

1

序列化是所述方法,其中數據轉換數據結構或對象狀態變爲可以存儲