在分布式部署应用中,可能会存在一到两个服务器代码没有及时更新的缺失设备,所以这两个设备中类的serialVersionUID可能不同。如果版本号没有显示定义,serialVersionUID会不一样,在网络传输或者数据读取的时候反序列化会有问题。具体的序列化过程如下:序列化时,系统会将当前类的serialVersionUID写入序列化后的文件中,反序列化时,系统会检测文件中的serialVersionUID,判断是否与当前类的serialVersionUID一致,如果一致,说明序列化类的版本和当前类的版本一致,反序列化才能成功,否则反序列化失败。当实现java.io.Serializable接口的类没有显式定义(由JVM自动生成)serialVersionUID变量时,Java序列化机制会根据编译后的Class自动生成一个serialVersionUID作为序列化版本。在这种情况下,如果Class文件(类名、方法名等)没有改变(加空格、换行、加注释等),即使多次编译,servantVersionUID也不会改变。但是这个id的生成是绑定jdk版本和class文件内容的,很容易导致不一致。
