posts - 72, comments - 66, trackbacks - 0, articles - 0
          當(dāng)一個(gè)類實(shí)現(xiàn)了序列化接口,有時(shí)會(huì)遇到 java.io.InvalidClassException 異常出現(xiàn):
          java.io.InvalidClassException: com.test.Test; local class incompatible: stream classdesc serialVersionUID = 7981560250804078637, local class serialVersionUID = -8334405535174160822
          這是序列化兼容性所致;
          java通過(guò)一個(gè)名為UID(stream unique identifier)來(lái)控制,這個(gè)UID是隱式的,它通過(guò)類名,方法名等諸多因素經(jīng)過(guò)計(jì)算而得,理論上是一一映射的關(guān)系,也就是唯一的。如果UID不一 樣的話,就無(wú)法實(shí)現(xiàn)反序列化了,并且將會(huì)得到InvalidClassException。
          當(dāng)要人為的產(chǎn)生一個(gè)新的版本(實(shí)現(xiàn)并沒(méi)有改動(dòng)),而拋棄以前的版本的話,可以通過(guò)顯式的聲名UID來(lái)實(shí)現(xiàn):
          private static final long serialVersionUID=????;//(你可以編造一個(gè)UID,但不能有重復(fù))

          對(duì)于上例我們可以在com.test.Test類中加入 :
          private static final long serialVersionUID=7981560250804078637l;
          這樣就解決了新老版本的兼容性問(wèn)題。
          當(dāng)然,對(duì)于序列化還有很多問(wèn)題,慢慢研究吧。

          Feedback

          # re: 有關(guān)序列化的問(wèn)題 java.io.InvalidClassException  回復(fù)  更多評(píng)論   

          2009-01-13 12:35 by 隔葉黃鶯
          如果你能掌控類之間的差異,就讓

          private static final long serialVersionUID=-1

          就行的,省得讓 Java 自己生成,或者用命令 serialver.exe 來(lái)生成 serialVersionUID

          # re: 有關(guān)序列化的問(wèn)題 java.io.InvalidClassException  回復(fù)  更多評(píng)論   

          2012-03-18 19:48 by kikyo
          萬(wàn)分感謝!?。。。。。。?!

          # re: 有關(guān)序列化的問(wèn)題 java.io.InvalidClassException  回復(fù)  更多評(píng)論   

          2015-10-15 17:48 by caoyang
          NB
          主站蜘蛛池模板: 女性| 大关县| 曲阜市| 方正县| 武川县| 天门市| 宜宾县| 丹寨县| 玉林市| 三原县| 平昌县| 平凉市| 河西区| 巩留县| 凤山县| 甘泉县| 昭平县| 乌拉特前旗| 虞城县| 赣州市| 晋州市| 孟连| 宣汉县| 佛教| 周口市| 汾阳市| 吴忠市| 大悟县| 吉隆县| 镇平县| 洮南市| 政和县| 彭山县| 贵南县| 涞源县| 集贤县| 沂水县| 法库县| 临安市| 南靖县| 都昌县|