什麼是序列化

2021-05-10 20:31:56 字數 1631 閱讀 2579

序列化就是將物件的狀態資訊轉換為可以儲存或傳輸的object的過程。在序列化期間,物件將其當前狀態寫入到臨時或永續性儲存區。以後,可以通過從儲存區中讀取或反序列化物件的狀態,重新建立該物件。

序列化是將物件狀態轉換為可保持或傳輸的格式的過程。與序列化相對的是反序列化,它將流轉換為物件。這兩個過程結合起來,可以輕鬆地儲存和傳輸資料。

序列化的目的:

1.   以某種儲存形式使自定義物件持久化;

2.   將物件從乙個地方傳遞到另乙個地方。

.net framework 提供兩種序列化技術:

1.   二進位制序列化,保持型別保真度,這對於在應用程式的不同呼叫之間保留物件的狀態很有用。例如,通過將物件序列化到剪貼簿,可在不同的應用程式之間共享物件。您可以將物件序列化到流、磁碟、記憶體和網路等等。

2.   xml序列化,僅序列化公共屬性和字段,且不保持型別保真度。當您要提供或使用資料而不限制使用該資料的應用程式時,這一點是很有用的。由於 xml 是乙個開放式標準,因此,對於通過 web 共享資料而言,這是乙個很好的選擇。

下面使用binaryformatter序列化類book作為例子來體會什麼是序列化。

定義類book:

[serializable]

public class book}

在類的上面增加了屬性serializable。(如果不加這個屬性,將丟擲serializationexception異常)。通過這個屬性將book標誌為可以序列化的。當然也有另一種方式使類book可以序列化,那就是實行iserializable介面了。note:serializable屬性是不能被繼承的。

如果你不想序列化某個變數,該怎麼處理呢?很簡單,在其前面加上屬性[nonserialized]。比如我不想序列化

string author;

那我只需要

[nonserialized]

string author;

接下來就是見證如何序列化的時刻:

using system;

using system.io;

using system.runtime.serialization.formatters.binary;

首先建立book例項,like this: 

book book = new book("day and night", 30.0f, "bruce");

接著當然要建立乙個檔案了,這個檔案就是用來存放我們要序列化的資訊了。

filestream fs = new filestream(@"c:/book.dat", filemode.create);

序列化的實現也很簡單,like this:

binaryformatter formatter = new binaryformatter();

formatter.serialize(fs, book);

完整**如下:

什麼是序列化?

形象的說,序列化就是 1 將乙個物件儲存到到儲存介質上或者 2 將物件進行轉換使其能夠在網路上傳輸的行為。能對乙個類進行序列化的條件是 該類的任何基類都可以序列化 該類應用了serializable特性。序列化常用的兩個應用如下 1.儲存和引導程式的配置 我們在程式中可以建立乙個類,它包含了應用程式...

什麼是序列化和反序列化 什麼是序列化和並行化

當兩個程序在進行遠端通訊時,彼此可以傳送各種型別的資料。無論是何種型別的資料,都會以二進位制序列的形式在網路上傳送。傳送方需要把這個物件轉換為位元組序列,才能在網路上傳送 接收方則需要把位元組序列再恢復為物件。把物件轉換為位元組序列的過程稱為物件的序列化。把位元組序列恢復為物件的過程稱為物件的反序列...

什麼是序列化和反序列化 什麼是序列化和並行化

當兩個程序在進行遠端通訊時,彼此可以傳送各種型別的資料。無論是何種型別的資料,都會以二進位制序列的形式在網路上傳送。傳送方需要把這個物件轉換為位元組序列,才能在網路上傳送 接收方則需要把位元組序列再恢復為物件。把物件轉換為位元組序列的過程稱為物件的序列化。把位元組序列恢復為物件的過程稱為物件的反序列...