我有一个分布式应用程序。客户端和服务器共享一些公共库。客户端必须使用JDK 5编译器或target = 1.5进行编译(在PowerPC和CoreDuo Mac上也可以在任何地方运行)。但我想在仅服务器代码中使用SE 6功能。
可以编译公共库两次 - 一次使用JDK 5,一次使用JDK 6,并使用JDK 5编译的类文件在客户端序列化对象,并在服务器端使用编译的类文件对它们进行反序列化一个JDK 6,反之亦然?或者会打破序列化?
构建应使用不同JDK版本编译的代码运行的库的最佳实践是什么?
答案 0 :(得分:5)
如果您明确定义了serialVersionUID
,则 可以在不同的JVM版本中进行序列化和反序列化。这就是定义它的重点;见the spec:
注意 - 强烈建议所有可序列化类显式声明
serialVersionUID
值,因为默认的serialVersionUID
计算对类详细信息非常敏感,这些详细信息可能因编译器而异实现,因此可能在反序列化期间导致意外的serialVersionUID
冲突,导致反序列化失败。