2016-09-19 26 views
1

有一些方法来序列化或反序列化的Java对象...有没有办法知道哪种类型的java对象一旦被反序列化就被发送了?

准备字节发送:

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
ObjectOutput out = null; 
try { 
    out = new ObjectOutputStream(bos); 
    out.writeObject(yourObject); 
    out.flush(); 
    byte[] yourBytes = bos.toByteArray(); 
    bos.close(); 
} 
catch(Exception ex) 
{ 

} 

从字节创建对象:

ByteArrayInputStream bis = new ByteArrayInputStream(yourBytes); 
ObjectInput in = null; 
try 
{ 
    in = new ObjectInputStream(bis); 
    Object o = in.readObject(); 
    if (in != null) 
    { 
     in.close(); 
    } 


    } 
    catch (Exception ex) 
    { 

    } 

}

但是,如果有人想通过网络发送不同类型的对象是否有办法知道哪种类型的对象已被发送。我想有可以选择创建一个类,然后序列化和反序列化它。

class SerialObject 
{ 
    String type; 
    Object object; 
} 
+0

'如果(在你的! = null)in.close'应该在finally块中。就目前而言,'in.close()'不一定是调用的,如果执行,'in!= null'将始终为真。 –

回答

1

我想知道发送的对象类型的唯一方法是当你在java中使用InstanceOf关键字。 java instanceof运算符用于测试对象是否是指定类型(类或子类或接口)的实例。 java中的instanceof也称为类型比较运算符,因为它将实例与类型进行比较。它返回true或false。

class Demo{ 
public static void main(String args[]){ 
Demo s=new Demo(); 
System.out.println(s instanceof Demo);//true 
} 
} 

此代码返回true。只是使用instanceof关键字。它会真正帮助

1

当你正在序列化,你可以存储类型的地方 - 地图或缓存或某处,但仍然不知道为什么你想要吗?

一个选项是在反序列化过程中使用instanceof运算符进行检查。我不确定是否(为什么?)应该有更多?

Object deserialized = in.readObject(); 

if (deserialized instanceof TypeAbdClass) { 
    // do something with .. 
} else if (deserialized instanceof SomethingElse) { 
    ... 
} else if (...) { 
    ... 
} 
相关问题