最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java序列化的原理分析及解決

 更新時間:2024年11月16日 08:40:57   作者:賺夠壹仟萬  
文章介紹了Java中的序列化機制,包括Serializable和Externalizable接口的區(qū)別,以及serialVersionUID的作用,Serializable接口可以序列化的所有子類型本身都是可序列化的,如果要序列化的類有父類,父類也應(yīng)該實現(xiàn)Serializable接口

概念

序列化是指將對象轉(zhuǎn)換為可傳輸格式的過程。是一種數(shù)據(jù)持久化手段。

在Java的序列化機制中,如果是String,枚舉或者是實現(xiàn)了Serializable接口的類,均可以通過Java的序列化機制,將類序列化為符合編碼的數(shù)據(jù)流,然后通過InputStream和OutputStream將內(nèi)存中的類持久化到硬盤或者網(wǎng)絡(luò)中。

Serializable 和 Externalizable 接口有何不同?

Serializable接口可序列化的所有子類型本身都是可序列化的。

如果要序列化的類有父類,要想將父類中的變量也持久化下來,那么父類也應(yīng)該實現(xiàn)Serializable接口。

Externalizable繼承了Serializable,該接口定義了兩個方法,當(dāng)使用Externalizable接口來進行序列化和反序列化時需要重寫這兩個方法,如果沒有定義具體的序列化細節(jié),那么序列化之后的對象為空。

serialVersionUID有什么用?沒定義會有什么問題?

虛擬機是否允許反序列化,不僅取決于類路徑和功能代碼是否一致,一個非常重要的點是兩個類的序列化ID是否一致。也即serialVersionUID一致。

在進行反序列化時,JVM會把傳來的字節(jié)流中的seriaVersionUD與本地相應(yīng)實體類的seriaIVersionUID進行比較,如果相同就認為是一致的,可以進行反序列化,否則就會出現(xiàn)序列化版本不一致的異常,即是InvalidCastException。這樣做是為了保證安全,因為文件存儲中的內(nèi)容可能被篡改。

注意:如果在使用時不去定義SerialVersionUID,如果在序列化對象之后修改了這個類的信息(例如加一個字段)那么反序列會失敗,因為會存在兩個不同的SerialVersionUID.

class User implements Serializable{
	private String name;
}

如果定義了一個上述類的對象并保存到文件中(這里沒有指定SerialVersionUID)。

然后修改這個類,增加一個屬性。

class User implements Serializable{
	private String name;
	private int age;
}

執(zhí)行反序列化時就會拋出一個InvalidClassException,并且指出兩個serialVersionUID不同。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解SpringBoot程序啟動時執(zhí)行初始化代碼

    詳解SpringBoot程序啟動時執(zhí)行初始化代碼

    這篇文章主要介紹了詳解SpringBoot程序啟動時執(zhí)行初始化代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • Spring Boot Security配置教程

    Spring Boot Security配置教程

    在本文里我們給大家分享了關(guān)于Spring Boot Security配置的相關(guān)步驟以及注意要點,需要的朋友們跟著操作下。
    2019-05-05
  • 使用java + OpenCV破解頂象面積驗證碼的示例

    使用java + OpenCV破解頂象面積驗證碼的示例

    這篇文章主要介紹了使用java + OpenCV破解頂象面積驗證碼的示例,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • 關(guān)于Spring統(tǒng)一異常處理及說明

    關(guān)于Spring統(tǒng)一異常處理及說明

    這篇文章主要介紹了關(guān)于Spring統(tǒng)一異常處理及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Spring獲取管理對象常用方法詳解

    Spring獲取管理對象常用方法詳解

    這篇文章主要介紹了Spring獲取管理對象常用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • 使用Java實現(xiàn)6種常見負載均衡算法

    使用Java實現(xiàn)6種常見負載均衡算法

    Java負載均衡算法也是分布式系統(tǒng)中的重要組成部分,用于將來自客戶端的請求分配到不同的后端服務(wù)器上,本文將介紹常見的Java負載均衡算法,輪詢法、加權(quán)隨機法……一次性讓你了解?6?種常見負載均衡算法
    2023-06-06
  • 論Java Web應(yīng)用中調(diào)優(yōu)線程池的重要性

    論Java Web應(yīng)用中調(diào)優(yōu)線程池的重要性

    這篇文章主要論述Java Web應(yīng)用中調(diào)優(yōu)線程池的重要性,通過了解應(yīng)用的需求,組合最大線程數(shù)和平均響應(yīng)時間,得出一個合適的線程池配置
    2016-04-04
  • Spring注解中@Configuration和@Component到底有啥區(qū)別

    Spring注解中@Configuration和@Component到底有啥區(qū)別

    之前一直搞不清@Component和@Configuration這兩個注解到底有啥區(qū)別,一直認為被這兩修飾的類可以被Spring實例化嘛,最近終于弄明白了,這篇文章主要給大家介紹了關(guān)于Spring注解中@Configuration和@Component到底有啥區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • SpringBoot實現(xiàn)異步任務(wù)的項目實踐

    SpringBoot實現(xiàn)異步任務(wù)的項目實踐

    本文將使用SpringBoot 去實現(xiàn)異步之間的調(diào)用,提高系統(tǒng)的并發(fā)性能、用戶體驗,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • Java?多個文件生成zip包、下載zip包的實現(xiàn)代碼

    Java?多個文件生成zip包、下載zip包的實現(xiàn)代碼

    這篇文章主要介紹了Java?多個文件生成zip包、下載zip包,包括文件上傳,文件下載,多個文件打成zip包的操作代碼,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2024-01-01

最新評論

修水县| 京山县| 奉节县| 筠连县| 富阳市| 丹巴县| 广灵县| 屏东县| 衡阳县| 黄陵县| 家居| 苏州市| 张家港市| 巴林左旗| 霍林郭勒市| 郴州市| 邵阳县| 五原县| 大石桥市| 合阳县| 大渡口区| 蕉岭县| 宝坻区| 阳朔县| 安泽县| 遂昌县| 碌曲县| 嘉义市| 云林县| 额敏县| 石屏县| 平山县| 营山县| 嘉黎县| 岳阳市| 江华| 察哈| 和平县| 都匀市| 新乐市| 嫩江县|