亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

詳解Java對象序列化為什么要使用SerialversionUID

瀏覽:118日期:2022-08-21 14:11:59

1、首先談談為什么要序列化對象

- 把對象轉換為字節(jié)序列的過程稱為對象的序列化。- 把字節(jié)序列恢復為對象的過程稱為對象的反序列化。

對象的序列化主要有兩種用途:1) 把對象的字節(jié)序列永久地保存到硬盤上,通常存放在一個文件中;2) 在網(wǎng)絡上傳送對象的字節(jié)序列。

在很多應用中,需要對某些對象進行序列化,讓它們離開內存空間,入住物理硬盤,以便長期保存。比如最常見的是Web服務器中的Session對象,當有 10萬用戶并發(fā)訪問,就有可能出現(xiàn)10萬個Session對象,內存可能吃不消,于是Web容器就會把一些seesion先序列化到硬盤中,等要用了,再把保存在硬盤中的對象還原到內存中。

當兩個進程在進行遠程通信時,彼此可以發(fā)送各種類型的數(shù)據(jù)。無論是何種類型的數(shù)據(jù),都會以二進制序列的形式在網(wǎng)絡上傳送。發(fā)送方需要把這個Java對象轉換為字節(jié)序列,才能在網(wǎng)絡上傳送;接收方則需要把字節(jié)序列再恢復為Java對象

2、為什么要使用SerialversionUID呢

簡單看一下 Serializable接口的說明

If a serializable class does not explicitly declare a serialVersionUID,then the serialization runtime will calculate a default serialVersionUID value for that class based on various aspects of the class, as described in the Java(TM) Object Serialization Specification.

如果用戶沒有自己聲明一個serialVersionUID,接口會默認生成一個serialVersionUIDHowever, it is stronglyrecommended that all serializable classes explicitly declareserialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpectedInvalidClassExceptions during deserialization.但是強烈建議用戶自定義一個serialVersionUID,因為默認的serialVersinUID對于class的細節(jié)非常敏感,反序列化時可能會導致InvalidClassException這個異常。e.g:1.使用默認的serialVersionUID

我們先建一個實體類Person 實現(xiàn)Serializable接口

public class Person implements Serializable { private int age; private String name; private String sex; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; }}

然后去序列化和反序列化它

public class Person implements Serializable { private int age; private String name; private String sex; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; }}

結果如圖

詳解Java對象序列化為什么要使用SerialversionUID

e.g:2如果我們先盡心序列化,然后在反序列化之前修改了Person類會怎樣呢

public class Person implements Serializable { private int age; private String name; private String sex; private String address; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; }}

運行結果

詳解Java對象序列化為什么要使用SerialversionUID 

 可以看到,當我們修改Person類的時候,Person類對應的SerialversionUID也變化了,而序列化和反序列化就是通過對比其SerialversionUID來進行的,一旦SerialversionUID不匹配,反序列化就無法成功。在實際的生產環(huán)境中,我們可能會建一系列的中間Object來反序列化我們的pojo,為了解決這個問題,我們就需要在實體類中自定義SerialversionUID。e.g:3 在Person類中加入自定義SerialversionUID

public class Person implements Serializable { private static final long serialVersionUID = -5809782578272943999L; private int age; private String name; private String sex; private String address; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; }}

不管我們序列化之后如何更改我們的Person(不刪除原有字段),最終都可以反序列化成功。

到此這篇關于詳解Java對象序列化為什么要使用SerialversionUID的文章就介紹到這了,更多相關Java對象序列化SerialversionUID內容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Java
相關文章:
主站蜘蛛池模板: 一本大道香蕉中文日本不卡高清二区 | 美女免费精品高清毛片在线视 | 婷婷丁香色综合图亚洲 | 亚洲视频综合 | 在线观看亚洲精品国产 | 国产免费观看网站 | 成人网mm视频在线观看 | 久久精品国产99国产精品免费看 | 精品国产国产综合精品 | 麻豆果冻传媒精品二三区 | 三及毛片 | 激情性生活视频在线播放免费观看 | 97起碰 | 国内精品久久久久影院蜜芽 | 高清国产美女一级a毛片录 高清国产美女在线观看 | 伊人色综合网一区二区三区 | 小明精品国产一区二区三区 | 国产真实露脸4p视频 | 精品一区二区三区在线观看视频 | 国产精品漂亮美女在线观看 | 午夜成年视频 | 色播综合网 | 真人一级毛片 | 国产九九免费视频 | 欧美黄色免费 | 欧美aaa毛片免费看 欧美aaa级 | 国产特黄特色的大片观看免费视频 | 色优久久| 午夜伦情电午夜伦情影院 | 浪潮ar二三区| 丰满的日本护士xxx 丰满美女福利视频在线播放 | 美女污污视频网站 | 1024亚洲视频| 免费日本黄色网址 | 日本在线看片网站 | 手机看片福利日韩欧美看片 | 久热香蕉视频 | 免费观看日本污污ww网站一区 | 国产成人免费永久播放视频平台 | 免费性生活视频 | 免费网址你懂的 |