有一些方法可以序列化或反序列化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 :(得分:1)
当您进行序列化时,您可以将类型存储在某个位置 - 地图或缓存或某处,但仍不确定为什么要这样?
一种选择是在反序列化期间检查instanceof运算符。我不确定(为什么?)是否应该有更多?
Object deserialized = in.readObject();
if (deserialized instanceof TypeAbdClass) {
// do something with ..
} else if (deserialized instanceof SomethingElse) {
...
} else if (...) {
...
}
答案 1 :(得分: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关键字。它将真正帮助
答案 2 :(得分:1)
您可以使用
Object.getClass()
这将返回对象的运行时类
参考java doc https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html