是否在同一源文件中使用来自不同JDK版本的编译器中断(反)序列化?

时间:2009-05-21 15:08:00

标签: serialization build-process jar java

我有一个分布式应用程序。客户端和服务器共享一些公共库。客户端必须使用JDK 5编译器或target = 1.5进行编译(在PowerPC和CoreDuo Mac上也可以在任何地方运行)。但我想在仅服务器代码中使用SE 6功能。

可以编译公共库两次 - 一次使用JDK 5,一次使用JDK 6,并使用JDK 5编译的类文件在客户端序列化对象,并在服务器端使用编译的类文件对它们进行反序列化一个JDK 6,反之亦然?或者会打破序列化?

构建应使用不同JDK版本编译的代码运行的库的最佳实践是什么?

1 个答案:

答案 0 :(得分:5)

如果您明确定义了serialVersionUID,则 可以在不同的JVM版本中进行序列化和反序列化。这就是定义它的重点;见the spec

  

注意 - 强烈建议所有可序列化类显式声明serialVersionUID值,因为默认的serialVersionUID计算对类详细信息非常敏感,这些详细信息可能因编译器而异实现,因此可能在反序列化期间导致意外的serialVersionUID冲突,导致反序列化失败。