有没有办法知道反序列化后发送了哪种类型的java对象?
有一些方法可以序列化或反序列化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
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
将始终为真。