日韩精品欧美激情国产一区_中文无码精品一区二区三区在线_岛国毛片AV在线无码不卡_亞洲歐美日韓精品在線_使劲操好爽好粗视频在线播放_日韩一区欧美二区_八戒八戒网影院在线观看神马_亚洲怡红院在线色网_av无码不卡亚洲电影_国产麻豆媒体MDX

serialVersionUID的作用

時(shí)間:2019-12-28 23:27:38 類型:JAVA
字號(hào):    




簡單來說,Java的序列化機(jī)制是通過在運(yùn)行時(shí)判斷類的serialVersionUID來驗(yàn)證版本一致性的。


在進(jìn)行反序列化時(shí),JVM會(huì)把傳來的字節(jié)流中的serialVersionUID與本地相應(yīng)實(shí)體(類)的serialVersionUID進(jìn)行比較,如果相同就認(rèn)為是一致的,可以進(jìn)行反序列化,否則就會(huì)出現(xiàn)序列化版本不一致的異常。(InvalidClassException)


serialVersionUID有兩種顯示的生成方式:

一個(gè)是默認(rèn)的1L,比如:private static final long serialVersionUID = 1L;

一個(gè)是根據(jù)類名、接口名、成員方法及屬性等來生成一個(gè)64位的哈希字段,

比如:private static final   long  serialVersionUID = xxxxL;


當(dāng)你一個(gè)類實(shí)現(xiàn)了Serializable接口,如果沒有顯式地定義serialVersionUID,Eclipse會(huì)提供這個(gè)  提示功能告訴你去定義 。

在Eclipse中點(diǎn)擊類中warning的圖標(biāo)一下,Eclipse就會(huì) 自動(dòng)給定兩種生成的方式。


如果不想定義它,在Eclipse的設(shè)置中也 可以把它關(guān)掉的,設(shè)置如下:

Window ==> Preferences ==> Java ==> Compiler ==> Error/Warnings ==>         Potential programming problems

將Serializable class without serialVersionUID的warning改成ignore即可。


當(dāng)實(shí)現(xiàn)java.io.Serializable接口的實(shí)體(類)沒有顯式地定義一個(gè)名為serialVersionUID的long型的變量,Java序列化機(jī)制會(huì)根據(jù)編譯的class(它通過類名,方法名等諸多因素經(jīng)過計(jì)算而得,理論上是一一映射的關(guān)系,也就是唯一的)自動(dòng)生成一個(gè)serialVersionUID作序列化版本比較用,這種情況下,如果class文件(類名,方法明等)沒有發(fā)生變化(增加空格,換行,增加注釋,等等),就算再編譯多次,serialVersionUID也不會(huì)變化的.

作者:wuxinliulei
鏈接:https://www.zhihu.com/question/24852886/answer/117314768
來源:知乎

<