反序列化Java LinkedList



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中。这些基本类型总是可以(反)序列化的。但列表只是图片的一小部分:只有当列表中的所有对象都可以被(反)序列化时,序列化才会起作用。

所以我的猜测是,异常被抛出到了另一个地方。请确保列表中的每个对象都正常工作。

相关内容

  • 没有找到相关文章

最新更新