这是LinkedList如何从Serializable
实现readObjectprivate void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException
{
// Read in any hidden serialization magic
s.defaultReadObject();
// Read in size
int size = s.readInt();
// Read in all elements in the proper order.
for (int i = 0; i < size; i++)
linkLast((E)s.readObject());
}
我通常设法通过
将其序列化为文件FileOutputStream fos = new FileOutputStream("list.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(list);
oos.close();
fos.close();
尝试以类似的方式从文件恢复列表(oos.readObject())以OptionalDataException结束。 这样做的正确方法是什么?
答案 0 :(得分:0)
我认为这应该可以解决问题。
FileInputStream fis = new FileInputStream("list.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
List list = (List) ois.readObject();
ois.close();
阅读OptionalDataException
的javadoc是个好主意。它详细介绍了可能抛出异常的情况。这应该提供一些线索来帮助找出问题所在。
答案 1 :(得分:0)
我认为问题在于您正在序列化未知类型的对象(E)。虽然第一种方法是有效的,因为你添加了显式强制转换,但第二种方法失败了,因为Java无法转换为未知类型E.这是我的猜测,但可能是错误的。
答案 2 :(得分:0)
问题可能不在LinkedList
中。这些基本类型总是可以(反)序列化。但是列表只是图片的一小部分:序列化仅在列表中 列表中的所有对象都可以(反)序列化时才有效。
所以我的猜测是异常被扔在另一个地方。确保列表中的每个对象都有效。