Java中serialVersionUID的作用
java在序列化的時候涉及到很多檢查,serialVersionUID就是其中一個。
那這個serialVersionUID有什麼用處?
這個值可以由類指定,也可以不指定。如果不指定的話java會根據class計算serialVersionUID,相當於hash的原理(但不是hash不要混淆),隻要類沒有變化,計算出來的serialVersionUID也會變化。
它用在反序列化的時候“檢查”當前的類是不是已經被修改過。如果發現serialVersionUID對不上號,那麼會拋出 java.io.InvalidClassException的異常,這種情況發生在由於種種因素修改了序列化對象的類文件時。
但是有時候我們有這樣的需求,將A類對象序列化之後,版本升級,修改了A類,這時候,希望反序列化的時候還能認識之前版本的序列化對象。這時候serialVersionUID就在笑了,對,隻要指定序列化對象類的serialVersionUID就可以了。
指定了序列化對象的serialVersionUID,即使你刪除了類的某個成員變量,其他未修改信息仍然能正確解析,對他就是這麼變態。
ps: 介紹下我的使用場景:我需要持久一些動態的配置,在每次修改之後,我都會將新的配置持久化到文件中。但是不想使用xml文件,雖然易懂,但是對我係統來說沒有必要,我這個配置我是提供用戶在頁麵上直接配置的,不需要打開XML文件來寫(容易出錯,還需要重啟應用)。我現在的做法就是就配置文件寫成一個類,配置項就是類中的成員變量,這樣新加配置文件直接內存中分配一個配置對象,然後將次對象序列化到文件中,但是考慮到配置項可能會增加,但是我需要在配置類新加了配置項之後,之前的數據文件仍然能讀取,於是就有了上麵的嚐試。
原帖地址:https://xuehuilu.blog.163.com/blog/static/114532348200975104337798/
最後更新:2017-04-02 06:52:24