亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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接口來進行序列化和反序列化時需要重寫這兩個方法,如果沒有定義具體的序列化細(xì)節(jié),那么序列化之后的對象為空。

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

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

在進行反序列化時,JVM會把傳來的字節(jié)流中的seriaVersionUD與本地相應(yīng)實體類的seriaIVersionUID進行比較,如果相同就認(rèn)為是一致的,可以進行反序列化,否則就會出現(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)文章

  • Spring Cloud Stream微服務(wù)消息框架原理及實例解析

    Spring Cloud Stream微服務(wù)消息框架原理及實例解析

    這篇文章主要介紹了Spring Cloud Stream微服務(wù)消息框架原理及實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Java日常練習(xí)題,每天進步一點點(62)

    Java日常練習(xí)題,每天進步一點點(62)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-08-08
  • spring framework源碼調(diào)試技巧

    spring framework源碼調(diào)試技巧

    這篇文章給大家介紹了spring-framework源碼調(diào)試方法,可以直接將最新代碼clone到本地,如果想在代碼做一些注釋,也可以Fork到自己的倉庫。本文采用Fork的方式,并添加了測試module,感興趣的朋友一起看看吧
    2021-10-10
  • springboot2.6.3讀取不到nacos上的配置文件問題

    springboot2.6.3讀取不到nacos上的配置文件問題

    這篇文章主要介紹了springboot2.6.3讀取不到nacos上的配置文件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • struts2入門介紹及代碼實例

    struts2入門介紹及代碼實例

    這篇文章主要介紹了struts2入門介紹及代碼實例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • SpringBoot 內(nèi)嵌 camunda的配置方法

    SpringBoot 內(nèi)嵌 camunda的配置方法

    Camunda是一個基于Java的框架,支持用于工作流和流程自動化的BPMN、用于案例管理的CMMN和用于業(yè)務(wù)決策管理的DMN,這篇文章主要介紹了SpringBoot 內(nèi)嵌 camunda,需要的朋友可以參考下
    2024-06-06
  • 一文簡單了解C#?中的DataSet類

    一文簡單了解C#?中的DataSet類

    這篇文章主要介紹了一文簡單了解C#?中的DataSet類,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • Java過濾器與監(jiān)聽器間區(qū)別與聯(lián)系

    Java過濾器與監(jiān)聽器間區(qū)別與聯(lián)系

    監(jiān)聽器是一個接口內(nèi)容由我們實現(xiàn),會在特定時間被調(diào)用,監(jiān)聽器用于監(jiān)聽web應(yīng)用中三大域?qū)ο?request,session,application),信息的創(chuàng)建,銷毀,增加,修改,刪除等動作的發(fā)生,然后做出相應(yīng)的響應(yīng)處理
    2023-01-01
  • thymeleaf實現(xiàn)前后端數(shù)據(jù)交換的示例詳解

    thymeleaf實現(xiàn)前后端數(shù)據(jù)交換的示例詳解

    Thymeleaf?是一款用于渲染?XML/XHTML/HTML5?內(nèi)容的模板引擎,當(dāng)通過?Web?應(yīng)用程序訪問時,Thymeleaf?會動態(tài)地替換掉靜態(tài)內(nèi)容,使頁面動態(tài)顯示,這篇文章主要介紹了thymeleaf實現(xiàn)前后端數(shù)據(jù)交換,需要的朋友可以參考下
    2022-07-07
  • 零基礎(chǔ)寫Java知乎爬蟲之獲取知乎編輯推薦內(nèi)容

    零基礎(chǔ)寫Java知乎爬蟲之獲取知乎編輯推薦內(nèi)容

    上篇文章我們拿百度首頁做了個小測試,今天我們來個復(fù)雜的,直接抓取知乎編輯推薦的內(nèi)容,小伙伴們可算松了口氣,終于進入正題了,哈哈。
    2014-11-11

最新評論