Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法知道反序列化后发送了哪种类型的java对象?_Java_Serialization_Udp_Deserialization - Fatal编程技术网

有没有办法知道反序列化后发送了哪种类型的java对象?

有没有办法知道反序列化后发送了哪种类型的java对象?,java,serialization,udp,deserialization,Java,Serialization,Udp,Deserialization,有一些方法可以序列化或反序列化java对象 准备要发送的字节: ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutput out = null; try { out = new ObjectOutputStream(bos); out.writeObject(yourObject); out.flush(); byte[] yourBytes = bos.toByteArray(); bo

有一些方法可以序列化或反序列化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; 
}

当您序列化时,您可以将类型存储在某个地方—映射、缓存或其他地方,但仍然不确定为什么要这样做

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

Object deserialized = in.readObject();

if (deserialized instanceof TypeAbdClass) {
  // do something with ..
} else if (deserialized instanceof SomethingElse) {
  ...
} else if (...) {
  ...
}

我认为知道要发送的对象类型的唯一方法是在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关键字。它将真正帮助您使用

Object.getClass() 
这将返回对象的运行时类

参考java文档

您的
if(in!=null)in.close
应该在finally块中。目前,
in.close()
不一定被调用,而且
in!=如果执行,null
将始终为真。