LinkedList就是这样从Serializable 实现readObject的
private 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结束。做这件事的正确方法是什么?
我认为这应该能奏效。
FileInputStream fis = new FileInputStream("list.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
List list = (List) ois.readObject();
ois.close();
最好阅读OptionalDataException
的javadoc。它详细介绍了可能引发异常的情况。这应该提供一些线索来帮助找出问题所在。
我认为问题在于您正在序列化未知类型(E)的对象。第一种方法之所以有效,是因为添加了显式强制转换,而第二种方法之所以失败,是因为Java无法强制转换为未知类型E。不过,我想这可能是错误的。
问题可能不在LinkedList
中。这些基本类型总是可以(反)序列化的。但列表只是图片的一小部分:只有当列表中的所有对象都可以被(反)序列化时,序列化才会起作用。
所以我的猜测是,异常被抛出到了另一个地方。请确保列表中的每个对象都正常工作。