关于java:serialVersionUID显示指定的原因

42次阅读

共计 515 个字符,预计需要花费 2 分钟才能阅读完成。

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

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

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

正文完
 0