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

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

          Feedback

          # re: 有關序列化的問題 java.io.InvalidClassException  回復  更多評論   

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

          private static final long serialVersionUID=-1

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

          # re: 有關序列化的問題 java.io.InvalidClassException  回復  更多評論   

          2012-03-18 19:48 by kikyo
          萬分感謝?。。。。。。。。?/div>

          # re: 有關序列化的問題 java.io.InvalidClassException  回復  更多評論   

          2015-10-15 17:48 by caoyang
          NB
          主站蜘蛛池模板: 湘乡市| 淮阳县| 宿松县| 闽清县| 于都县| 盖州市| 伊宁市| 龙门县| 德江县| 广昌县| 宝鸡市| 洪洞县| 铁岭市| 马山县| 玉门市| 吴旗县| 清苑县| 乌审旗| 新郑市| 思南县| 塔城市| 北流市| 东源县| 吴堡县| 泰宁县| 子洲县| 舞钢市| 大同市| 古浪县| 社旗县| 长阳| 临颍县| 南投县| 靖西县| 涞水县| 靖江市| 遂平县| 琼海市| 台江县| 朝阳县| 望奎县|