序列化與反序列化

2021-09-29 15:49:44 字數 1379 閱讀 4106

為什麼要使用序列化:

序列化就是讓一系列手動賦值的過程進行了封裝,從而提高效率!

之前如果要對乙個物件處理的話,那麼就需要對物件中的值乙個乙個賦內容,這樣的話就比較浪費時間,而且有層次結構的話,賦值傳值接收值都比較麻煩。

所以序列化就是簡化這個過程,運用序列化 一般將物件序列成json的格式 然後傳值  運用反序列化將 json在轉回物件

什麼叫序列化?

我們都知道物件是暫時儲存在記憶體中的,不能用u盤考走了,有時為了使用介質轉移物件,並且把物件的狀態保持下來,就需要把物件儲存下來,這個過程就叫做序列化,通俗點,就是把人的魂(物件)收伏成乙個石子(可傳輸的介質)

什麼叫反序列化?

就是再把介質中的東西還原成物件,把石子還原**的過程。

在進行這些操作的時候都需要這個可以被序列化,要能被序列化,就得給類頭加[serializable]特性。

通常網路程式為了傳輸安全才這麼做。

如何使用序列化:

首先說明serializable主要作用將類的例項持久化儲存,序列化就是儲存,反序列化就是讀取。儲存也不一定儲存在本地,也可以儲存到遠方。類一定要實現serializable才可以

將 serializableattribute 特性應用於某個型別,以指示此型別的例項可以被序列化,具體做法在類之前加[serializable]

[serializable]

public class a: b

{

[nonserialized] public int n2;
說明這個類是可以被序列化的

可以通過使用 nonserialized 屬性標記成員變數來防止它們被序列化

另外,更需要注意的是,所有類,結構,列舉等都可以使用serializableattribute來進行修飾,但不是所有的類或結構都適合序列化,因為有些欄位是無法進行序列化的,或無法再反序列化的。如指標(intptr型別),因為在我們序列化時,指標位址會被持久化,然而在反序列化時,該指標位址所指向的內容將不在是原來的內容了。除非該指標不需要被序列化,那麼可以使用nonserializedattribute來修飾這些不支援序列化的字段。

其實serializableattribute僅僅是個標識,用於說明類是可以序列化的。但實際類是否真的合適序列化,需要類的設計者斟酌。設計者需要判斷物件的可序列化的字段中是否包含指標等不合適的型別,因為類的使用者只知道類是serializableattribute修飾的,便認為是可以序列化的,僅此而已。

序列化的過程實現:

1:先看是不是有serializable 特性標籤  沒有就會報錯 引發serializationexception

2:   看一下沒有有自定義的序列化規則 有呼叫 沒有 就使用預設的序列化規則

3:對所有未標記為 nonserialized 的字段都進行序列化

序列化和反序列化 C 序列化與反序列化。

序列化介紹 把物件用一種新的格式來表示。系列化只序列化資料。序列化不建議使用自動屬性 為什麼要序列化 將乙個複雜的物件轉換流,方便儲存與資訊交換。class program class person public int age 二進位制序列化 就是將物件變成流的過程,把物件變成byte class...

序列化與反序列化

把複雜的資料型別壓縮到乙個字串中 serialize 把變數和它們的值編碼成文字形式 unserialize 恢復原先變數 eg stooges array moe larry curly new serialize stooges print r new echo print r unserial...

序列化與反序列化

序列化是將物件處理為位元組流以儲存物件或傳輸到記憶體 資料庫或檔案。其主要目的是儲存物件的狀態,以便可以在需要時重新建立物件。相反的過程稱為反序列化。通過序列化,開發人員可以儲存物件的狀態,並在需要時重新建立該物件,從而提供物件的儲存以及資料交換。通過序列化,開發人員還可以執行類似如下的操作 通過 ...