我目前正在编写一个项目,其中有一个可序列化的类 ClientRepository。该类不指定任何serialVersionUID。 当我尝试运行我的程序时,出现以下异常:
Exception in thread "main" java.io.InvalidClassException: ClientRepository; local class incompatible: stream classdesc serialVersionUID = -477189107700903771, local class serialVersionUID = -3576242897222506440
所以我添加了默认的serialVersionUID(1L),但现在我得到了
Exception in thread "main" java.io.InvalidClassException: ClientRepository; local class incompatible: stream classdesc serialVersionUID = -477189107700903771, local class serialVersionUID = 1
如何将“stream classdesc serialVersionUID”更改为1L,这样就不会冲突?
谢谢!
最佳答案
不要尝试更改数据 - 相反,如果您确定您的类仍然与旧版本兼容(并且如果只有一个版本具有数据),将声明的 serialVersionUID
更改为 -477189107700903771L 以匹配数据中的值。该值是任意的 - 它只需与数据中的内容匹配即可。
当然,如果您的类以不兼容的方式发生了更改,您将需要编写一些自定义序列化代码。
就我个人而言,正是由于这些脆弱性原因,我尝试避免像这样的 native 二进制序列化。您可能希望查看替代方案,例如 Protocol Buffers .
关于java - SerialVersionUID 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23695116/