对接口类型的反序列化返回null

时间:2014-10-15 02:51:26

标签: java serialization interface bytearray deserialization

我有以下情况:

Interface A{
}

Class X implements A, Serializable{
}

程序P1知道AX,并将类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();

对象objANULL

行后获得A objA = (A) in.readObject();

我不能反序列化为接口类型吗?

我的错误在哪里?

非常感谢,

吉尔赫尔梅

1 个答案:

答案 0 :(得分:0)

如果readObject()返回null,则将空值传递给writeObject()

真正的原因可能是readObject()抛出了异常,您的代码会被忽略并返回null。在这种情况下,您需要调试异常。不要忽视它。