我是序列化的新手,所以这可能是一个简单的问题,但我的google-fu今天很弱。
假设您有以下类:
public class Base implements Serializable {
// ...
}
public class Der1 extends Base {
// ...
}
public class Der2 extends Base {
// ...
}
Alice随机创建Der1
或Der2
的对象,将其序列化为文件,然后将其发送给Bob。 Bob知道这个对象的类是Base
的子类,但不知道哪一个(他有与Alice有相同的类定义)。 Bob如何将文件反序列化为适当子类的实例?
我的第一个想法是,Alice可以定义一个这样的类:
public DerClass implements Serializable {
public Class<? extends Base> class;
}
她使用它来存储对象的类,将其序列化并将其发送给Bob。 Bob从此文件构造DerClass
对象,读取class
变量,使用它来实例化正确的子类,并将序列化对象读入其中。这会有用吗?还有更好的方法吗?
答案 0 :(得分:5)
反序列化应用程序不需要知道类型,它只需要在类路径中具有相同的类。例如Alice需要拥有Bob可能发送的所有课程以及他们的父母和家属。
// Bob sends
Base base = // some Base class
objectOutputStream.writeObjec(base);
// Alice receives
Base base = (Base) objectInputStream.readObject();