问题:A类实现Serializable B类扩展A实现Serializable
现在我仅使用 B 类作为运行时类型进行序列化。所以我有一个清单:
List<A> lst = new ArrayList<A>();
lst.add(new B());
...
objectOutputStream.writeObject(lst.get(i)); //this write compiler-type A, runtime-type B
如果我现在反序列化它,我会得到 java.io.OptionalDataException 错误。无论如何,我想知道我的对象如何成为正确的运行时类型。反序列化:
A a = (A) objectInputStream.readObject();
如果它在序列化时是一个运行时类型,这会导致 B 类的运行时类型,还是我必须覆盖 A 的每个子类的默认序列化?
希望我没有错过任何明显的事情。
提前致谢 : )
编辑:
感谢所有的答案,他们真的帮助我理解了我自己的错误。
抛出异常是因为我(如回答)使用了 in.read(arr); 这导致未完全读取数据,因此它无法正确反序列化对象(当然不是) - 在将其更改为 readFully 后,它按预期工作。