開始使用更新的Eclipse後,發現老是會出現serialVersionUID的warring,由warring的內容來看他跟seriable有關,只是以前怎麼好像沒遇過,查了一下才發現。
原來是不同的JVM的serialize實作不必然相同,所以這個serialVersionUID真的就是serail Version 的UID,可以用來表明serialize的版本,如果你將一個instance serialize後,在deserialize時就會檢查serialVersionUID是不是一樣,不一樣的話就不會deserialize ,就能控制相容性的問題。
如果你沒有自己定義serialVersionUID的話,JVM(?)會依據class計算出不一樣的serialVersionUID,下次你在class裡新增member的話,serialVersionUID 不一樣就不能做deserialize 。
如果你自訂serialVersionUID,就能控制serialVersionUID,class能相容從舊的serialize storage再deserialize,而新增的member就會變初始預設值。在runtime時可由java.io.ObjectStreamClass取得serialVersionUID值。
如果不知道取什麼值 JDK有個tool serialver.exe可以幫你產生值。
沒有留言:
張貼留言