考虑以下情况:
有一个序列化文件,由旧版本的应用程序创建.不幸的是,已经序列化了类的包已更改.现在我需要将此文件中的信息加载到同一个类中,但位于不同的包中.此类已serialVersionUID定义且未更改(即兼容).
问题:是否可以使用任何技巧从该文件加载新的类实例(除了将类复制到旧包中然后使用反序列化包装器逻辑)?可以用来readResolve()从移动/重命名类中恢复吗?如果没有,请解释原因.
如何在运行时从序列化过程中排除类字段?编译时有瞬态修饰符,但运行时呢?我的意思是使用ObjectOutputStream的常见java序列化,而不是gson或其他东西.
对不起我想我没解释得对.这是不完全有关序列化的,而是德 -serialization.我有一批遗留文件并像这样处理它们:
public class Deserialize {
/**
* @param args
* @throws IOException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws ClassNotFoundException, IOException {
File file = new File("/home/developer/workspace/DDFS/some.ddf");
HackedObjectInputStream in = new HackedObjectInputStream(new GZIPInputStream(new FileInputStream(file)));
System.out.println("Attempt to open " + file.getAbsolutePath());
Object obj = in.readObject();
in.close();
}
static class HackedObjectInputStream extends ObjectInputStream
{
/**
* Migration table. Holds old to new classes representation.
*/
private static final Map<String, Class<?>> MIGRATION_MAP = new HashMap<String, …Run Code Online (Sandbox Code Playgroud)