`

Serializable UID一致性问题

    博客分类:
  • java
阅读更多

应该都在知道,当我们要将java对象存在在本地,或者从本地读取到内存中该对象的类必须实现serializable接口,其实该接口中没有任何方法的声明看,只是作为一个可被jvm特殊处理的标志,每一个实现该接口的类都有一个UID(stream unique identifier )作为该类的唯一标志,这个UID是通过类名、方法名等诸多因素计算出来的,它和该类是一一对应的关系。如若UID不对应那么就无法实现反序列化了。会出现如下异常

java.io.InvalidClassException: com.java.model.User; local class incompatible: stream classdesc 
serialVersionUID = -405990810656876143, local class serialVersionUID = 875403040358241326

 

由上面可知,当我向本地序列化对象之后,尽量不要 已经被序列化的类中添加或者删除相关字段或者方法 ,如若必须要改动则需重新进行序列化操作。

 

另一种情况容易出现UID不一致的情况就是在做分布式的时候,由于UID在没有指定的时候是jvm根据类的相关属性自动生成的,所以选择相同的jvm是前提,所以在做分布式的时候尽量要选取相同的jvm

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics