在不知道Java类型的情况下反序列化对象

时间:2012-03-18 09:46:54

标签: java serialization

通常,反序列化按以下方式完成:

PersistentTime time = null;
time = (PersistentTime)ois.readObject();

其中ois是ObjectInputStream对象,PersistentTime是我们要反序列化的类。

因此,如果我的应用程序通过网络发送了2或3种对象,是否可以在不知道类型的情况下反序列化对象或首先知道对象的类型,然后根据该类型反序列化?

3 个答案:

答案 0 :(得分:8)

当然;你已经这样做了!但是如果你想保存类型转换以供日后使用:

Object deserialized = ois.readObject();

if (deserialized instanceof PersistentTime) {
  PersistentTime time = (PersistentTime)deserialized;
  // do something with time...
} else if (deserialized instanceof SomethingElse) {
  ...
} else if (...) {
  ...
}

答案 1 :(得分:3)

反序列化然后检查其类型

Object object = ois.readObject();
if (object instanceof PersistentTime) {
    PersistentTime time = (PersistentTime)object;
    // Do something to PersistentTime
} else if (object instanceof SomeClass) {
    // Do something to someclass
}

答案 2 :(得分:1)

您可以先读取对象,然后检查其类型,然后转换为适当的类型并使用,例如

Object obj = ois.readObject();

if (obj instanceof PersistentTime) {
    PersistentTime time =- (PersistentTime)obj;
    // use time
}