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

时间:2013-05-26 03:20:03

标签: java serialization

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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

您可以阅读文章http://www.mkyong.com/java-best-practices/understand-the-serialversionuid/作为示例。