我有一个分布式应用程序。客户端和服务器共享一些公共(public)库。客户端必须使用 JDK 5 编译器或 target=1.5 进行编译(也可以在 PowerPC 和 CoreDuo Mac 上的任何地方运行)。但我想在仅服务器代码中使用 SE 6 功能。
是否可以将公共(public)库编译两次 - 一次使用 JDK 5,一次使用 JDK 6,并使用使用 JDK 5 编译的类文件在客户端序列化对象,并使用使用 JDK 编译的类文件在服务器端反序列化它们JDK 6 反之亦然?或者这会破坏序列化吗?
构建应与使用不同 JDK 版本编译的代码一起运行的库的最佳实践是什么?
最佳答案
如果您显式定义 serialVersionUID
,则应该可以在不同的 JVM 版本中进行序列化和反序列化。这就是定义它的要点;请参阅the spec :
Note - It is strongly recommended that all serializable classes explicitly declare
serialVersionUID
values, since the defaultserialVersionUID
computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpectedserialVersionUID
conflicts during deserialization, causing deserialization to fail.
关于serialization - 在同一源文件上使用不同 JDK 版本的编译器是否会破坏(反)序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/893433/