日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

探析“Java序列化”之serialVersionUID

發(fā)布時(shí)間:2024/4/13 java 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 探析“Java序列化”之serialVersionUID 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

未顯式指定serialVersionUID

當(dāng)沒(méi)有顯式地定義serialVersionUID變量時(shí),Java序列化機(jī)制會(huì)根據(jù)編譯的class自動(dòng)生成一個(gè)serialVersionUID作序列化版本,它通過(guò)類名,方法名等諸多因素經(jīng)過(guò)計(jì)算而得,和類名、實(shí)例方法名、實(shí)例屬性名等有關(guān),和靜態(tài)屬性名和值、實(shí)例屬性值無(wú)關(guān)。

這種情況下,如果class文件(類名,方法名等)沒(méi)有發(fā)生變化(增加空格,換行,增加注釋,等等),就算編譯再多次,serialVersionUID也不會(huì)變化的。但一旦變化,那么在反序列化時(shí)就會(huì)出現(xiàn)序列化版本不一致的異常InvalidCastException。

反序列化過(guò)程

  • 首先,載入需要反序列化的byte[]數(shù)組,并解析出類名全路徑,jvm會(huì)使用URLClassLoader去找本虛擬機(jī)中是否加載過(guò)這樣類名的一個(gè)類;

  • 如果有,計(jì)算這個(gè)類的serialVersionUID值(如果顯示聲明了就不用計(jì)算,直接用),再和byte[]數(shù)組中的serialVersionUID對(duì)比,不相同報(bào)出異常;

  • 當(dāng)相同時(shí),根據(jù)剛剛得到的類名全路徑newInstance一個(gè)對(duì)象出來(lái),然后使用反射將byte內(nèi)容一一復(fù)制給該對(duì)象,最后返回該對(duì)象。

  • 總結(jié)

    以上是生活随笔為你收集整理的探析“Java序列化”之serialVersionUID的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。