我有以下情况:
Interface A{
}
Class X implements A, Serializable{
}
程序P1知道A
和X
,并将类objX
的对象X
序列化为字节数组byAX
。
然后,P1通过中间件将byAX
发送到程序P2。
P2只知道接口A
。因此,它将byAX
反序列化为A
类型的对象。问题是此操作返回NULL
。
P1中的序列化实现如下:
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = null;
try {
out = new ObjectOutputStream(bos);
out.writeObject(objX);
byte[] byAX = bos.toByteArray();
...
P2中的反序列化实现如下:
ByteArrayInputStream bis = new ByteArrayInputStream(byAX);
ObjectInput in = new ObjectInputStream(bis);
A objA = (A) in.readObject();
对象objA
在NULL
A objA = (A) in.readObject();
我不能反序列化为接口类型吗?
我的错误在哪里?
非常感谢,
吉尔赫尔梅
答案 0 :(得分:0)
如果readObject()
返回null,则将空值传递给writeObject()
。
真正的原因可能是readObject()
抛出了异常,您的代码会被忽略并返回null。在这种情况下,您需要调试异常。不要忽视它。