如何更改一堆java可序列化类的包

时间:2010-10-07 18:05:24

标签: java serialization

我想在我的应用程序中更改多个类的包。 一个不错的eclipse redactor很好,但我的一些类是Serializables,我需要支持跨版本兼容性。

关于如何做到的任何想法? 可以自动/半自动完成吗?

2 个答案:

答案 0 :(得分:3)

如果类结构保持不变,则可以继承自定义ObjectInputStream,在其构造函数中调用enableResolveObject(true),然后使用以下内容覆盖readClassDescriptor()

protected ObjectStreamClass readClassDescriptor() throws IOException, ClassNotFoundException {
    ObjectStreamClass read = super.readClassDescriptor();
    if (read.getName().startsWith("com.old.package.")) {
        return ObjectStreamClass.lookup(Class.forName(read.getName().replace("com.old.package.", "org.new.package.")));
    }
    return read;
}

答案 1 :(得分:0)

如果不破坏与序列化的兼容性,您根本无法更改类名称或包装。

您必须找到一种方法将您的课程保持在同一个包中,否则您必须打破复古兼容性。

如果您仍然对应用程序的先前版本进行更新,则可以创建强制更新,这将更改序列化数据的方式,并且不使用默认的Java序列化。


关于同一主题: