在分布式部署的利用中,可能会存在漏掉一两台设施的服务器代码没有及时更新,因而这两台设施中类的serialVersionUID可能存在不同。如果版本号不显示定义,则serialVersionUID则会不同,网络传输或者数据读取时,反序列化就会呈现问题。

具体的序列化过程是这样的:序列化操作的时候零碎会把以后类的serialVersionUID写入到序列化文件中,当反序列化时零碎会去检测文件中的serialVersionUID,判断它是否与以后类的serialVersionUID进行比拟,如果统一就阐明序列化类的版本与以后类的版本是一样的,能够反序列化胜利,否则失败。

当实现java.io.Serializable接口的类没有显式地定义(JVM主动生成)一个serialVersionUID变量时候,Java序列化机制会依据编译的Class主动生成一个serialVersionUID作序列化版本,这种状况下,如果Class文件(类名、办法名等)没有发生变化(减少空格、换行、减少正文等等),就算编译屡次,servialVersionUID也不会变动的。
然而这种id的生成和jdk版本以及class文件内容绑定,很容易导致不统一。