大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java序列號之Java序列化

Java序列號之Java序列化

更新時間:2022-12-13 12:50:02 來源:動力節點 瀏覽1153次

Java序列號之Java序列化是什么?動力節點小編來告訴大家。

Java序列號之Java序列化

序列化:將對象寫入到IO流中

反序列化:從IO流中恢復對象

意義:

1.序列化機制允許將實現序列化的Java對象轉換位字節序列,這些字節序列可以保存在磁盤上。

2.通過網絡傳輸,以達到以后恢復成原來的對象。

3.序列化機制使得對象可以脫離程序的運行而獨立存在。

使用場景:

1.所有可在網絡上傳輸的對象都必須是可序列化的。

2.所有需要保存到磁盤的java對象都必須是可序列化的。

所以基本上每個javaBean類都實現Serializeable接口。

實現方式:

實現Serializable接口或者Externalizable接口之一。

Serializable:

1.序列化步驟:

步驟一:創建一個ObjectOutputStream輸出流;

步驟二:調用ObjectOutputStream對象的writeObject輸出可序列化對象。

2.反序列化步驟:

步驟一:創建一個ObjectInputStream輸入流;

步驟二:調用ObjectInputStream對象的readObject()得到序列化的對象。

3.注意:引用類型類成員

如果一個可序列化的類的成員不是基本類型,也不是String類型,那這個引用類型也必須是可序列化的;否則,會導致此類不能序列化。

4.注意:同一對象序列化多次的機制

【同一對象序列化多次,并不會將此對象序列化多次得到多個對象。】原因如下:(Java序列化算法)

所有保存到磁盤的對象都有一個序列化編碼號

當程序試圖序列化一個對象時,會先檢查此對象是否已經序列化過,只有此對象從未(在此虛擬機)被序列化過,才會將此對象序列化為字節序列輸出。

如果此對象已經序列化過,則直接輸出編號即可。

5.潛在的問題:

如果序列化一個可變對象(對象內的內容可更改)后,更改了對象內容,再次序列化,并不會再次將此對象轉換為字節序列,而只是保存序列化編號。

所以,比較反序列化后,兩個對象更改的內容屬性,任然是相同的。

6.自定義序列化:

(1)使用transient關鍵字選擇不需要序列化的字段。對于引用類型,值是null;基本類型,值是0;boolean類型,值是false。

(2)通過重寫writeObject與readObject方法,可以自己選擇哪些屬性需要序列化, 哪些屬性不需要。

(3)如果writeObject使用某種規則序列化,則相應的readObject需要相反的規則反序列化,以便能正確反序列化出對象。這里展示對名字進行反轉加密。

(4)當序列化流不完整時,readObjectNoData()方法可以用來正確地初始化反序列化的對象。

(5)徹底的自定義序列化:

1)writeReplace:在序列化時,會先調用此方法,再調用writeObject方法。此方法可將任意對象代替目標序列化對象

2)readResolve:反序列化時替換反序列化出的對象,反序列化出來的對象被立即丟棄。此方法在readeObject后調用。

3)readResolve常用來反序列單例類,保證單例類的唯一性。

Externalizable:(性能略好)

1.通過實現Externalizable接口,必須實現writeExternal、readExternal方法。

注意1:Externalizable接口不同于Serializable接口,實現此接口必須實現接口中的兩個方法實現自定義序列化,這是強制性的;

注意2:特別之處是必須提供pulic的無參構造器,因為在反序列化的時候需要反射創建對象。

Serializable對比Externalizable:

Serializable:系統自動存儲必要的信息、易于實現,只需要實現該接口、性能略差

Externalizable:程序員決定存儲哪些信息、必須實現接口內的兩個方法、性能略好

序列化版本號serialVersionUID:

1.作用:

反序列化必須擁有class文件,但隨著項目的升級,class文件也會升級為保證升級前后的兼容性:

java序列化提供了一個serialVersionUID 的序列化版本號,只有版本號相同,即使更改了序列化屬性,對象也可以正確被反序列化回來。

2.不指定版本號的隱患:

序列化版本號如果不指定,JVM會根據類信息自己計算一個版本號,這樣隨著class的升級,就無法正確反序列化;

不指定版本號另一個明顯隱患是,不利于jvm間的移植,可能class文件沒有更改,但不同jvm可能計算的規則不一樣,這樣也會導致無法反序列化。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国内精品久久久久影院一蜜桃 | 国产精品美女久久久久网站 | 久久99精品久久久久久国产人妖 | 国产精品久久久久免费视频 | 国产成人丝袜网站在线观看 | 成人精品视频一区二区三区 | 成人国产第一区在线观看 | 四虎成人影视 | 国产精品一国产精品免费 | 国内自拍一二三四2021 | 一男一女一级毛片 | 国产毛片在线高清视频 | 久久er国产精品免费观看1 | 中文字幕在线精品不卡 | 欧美成人精品高清在线观看 | 国产成人精品日本亚洲麻豆 | 在线观看 一区二区 麻豆 | 亚洲欧美日韩成人一区在线 | 四虎在线视频观看大全影视 | 综合在线视频精品专区 | 精品视频一区二区三区免费 | 99久热在线精品视频观看 | 亚洲区一二三四区2021 | 在线国产视频一区 | 四虎免费永久在线播放 | 精品国产区一区二区三区在线观看 | 夜夜骑狠狠干 | 日日干天天插 | 国内第一永久免费福利视频 | 又粗又大的机巴好爽视频视频 | 成 人 黄 色 大 片全部 | 手机看片福利盒子久久青 | 国产不卡免费视频 | 亚洲日韩欧美一区二区在线 | 中国一级特黄高清免费的大片 | 久久精品看片 | 国产第一区二区三区在线观看 | 国产视频a | 久久国产精品只做精品 | 毛色毛片免费看 | 日本黄色小视频在线观看 |