serialization - 在同一源文件上使用不同 JDK 版本的编译器是否会破坏(反)序列化?

标签 serialization build-process jar java

我有一个分布式应用程序。客户端和服务器共享一些公共(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 default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected serialVersionUID conflicts during deserialization, causing deserialization to fail.

关于serialization - 在同一源文件上使用不同 JDK 版本的编译器是否会破坏(反)序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/893433/

相关文章:

java - 如何更改 Aerospike 使用的序列化器/解串器?

c++ - protobuf 无法序列化

当值可以是数组或单个项目时,C# DataContractJsonSerializer 失败

visual-studio-2010 - Visual Studio - 更好地指示构建状态

android - Android Studio 运行的是哪个构建系统?

javascript - 有没有办法使用 gulp 修改我的 index.html 以防止 CSS 缓存?

java - 如何在 Eclipse 中将我的 QtJambi 项目导出到 .JAR 文件?

Java 不从 list 定义的类路径加载类

java - 列出多个jar文件的内容

java - 序列化对象的文件扩展名