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