反序列化Java LinkedList

时间:2012-03-21 13:21:33

标签: java serialization linked-list

这是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结束。 这样做的正确方法是什么?

3 个答案:

答案 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中。这些基本类型总是可以(反)序列化。但是列表只是图片的一小部分:序列化仅在列表中 列表中的所有对象都可以(反)序列化时才有效。

所以我的猜测是异常被扔在另一个地方。确保列表中的每个对象都有效。