Java 加载新版本的jar时,旧的序列化将无法工作

Java 加载新版本的jar时,旧的序列化将无法工作,java,serialization,Java,Serialization,好的,我有一个jar,jar a和另一个jar,jar B。jar B是旧的,我刚刚用它将一个对象序列化为一个文件。我关闭了正在运行的jar B,并下载jar A来替换jar B。问题是A与B相比有一些新的/缺少的字段。有没有办法使用jar B的副本来加载序列化对象,然后将其移到A?(或者您能想到的任何其他解决方案) 大家都知道,我不能使用外部库。 提前感谢您的帮助。这取决于您是否有权访问JAR的源代码。考虑到这个问题,我想你不会的。如果是这种情况,您可以使用一个使用JARB的自定义类加载器,加

好的,我有一个jar,jar a和另一个jar,jar B。jar B是旧的,我刚刚用它将一个对象序列化为一个文件。我关闭了正在运行的jar B,并下载jar A来替换jar B。问题是A与B相比有一些新的/缺少的字段。有没有办法使用jar B的副本来加载序列化对象,然后将其移到A?(或者您能想到的任何其他解决方案)

大家都知道,我不能使用外部库。
提前感谢您的帮助。

这取决于您是否有权访问JAR的源代码。考虑到这个问题,我想你不会的。如果是这种情况,您可以使用一个使用JARB的自定义类加载器,加载给定的类,然后必须将其转换为非对象格式(XML、JSON、String等),以便调用另一个类,该类可以使用字符串中的信息创建一个新的a对象


如果这只是一次转换,那么让一个应用程序使用JARB、加载类并将其保存为非序列化形式(同样是XML、JSON、文本等)可能会更容易然后,您的实际应用程序可以使用JAR A加载该文件。

您需要在正在序列化的对象的类定义中提供串行版本Id,然后您需要在JAR A和B中保持相同的版本Id。完成此操作后,您应该能够使用JAR A序列化的JAR B反序列化文件

你可以阅读这篇文章作为例子