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

eke*_*ren 5 java serialization

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

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

van*_*nto 4

如果类结构保持不变,您可以子类化自定义 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;
}
Run Code Online (Sandbox Code Playgroud)