2012-03-21 101 views
2

这是怎样的LinkedList从序列化反序列化的Java LinkedList的

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()); 
} 

实现的readObject我通常设法序列化的

FileOutputStream fos = new FileOutputStream("list.ser"); 
ObjectOutputStream oos = new ObjectOutputStream(fos); 
oos.writeObject(list); 
oos.close(); 
fos.close(); 

到文件的尝试以类似的方式,从文件恢复列表( oos.readObject())以OptionalDataException结束。 做什么是正确的方法?

+1

你会给完整的代码吗?它应该像'ObjectInputStream'一样简单并使用'readObject'方法。 – 2012-03-21 13:27:18

+0

我们能否看到用于恢复列表的确切代码? – 2012-03-21 13:27:48

+0

'oos.readObject()''ObjectOutputStream'中的'oos'? – Brambo 2012-03-21 13:30:06

回答

0

这应该是诀窍,我想。

FileInputStream fis = new FileInputStream("list.ser"); 
    ObjectInputStream ois = new ObjectInputStream(fis); 
    List list = (List) ois.readObject(); 
    ois.close(); 

这将是阅读的Javadoc OptionalDataException一个好主意。它详细描述了可能抛出异常的情况。这应该提供一些线索来帮助弄清楚发生了什么问题。

0

我认为这个问题是因为你在序列化未知类型的对象(E)。虽然第一种方法是因为你添加了明确的转换,第二种方法失败了,因为Java不能转换为未知类型E.这是我的猜测,但可能是错误的。

0

问题可能不在LinkedList。这些基本类型总是可以(去)序列化。但是列表只是图片的一小部分:序列化只有在所有对象列表可以(去)序列化的情况下才会起作用。

所以我的猜测是异常抛出在不同的地方。确保列表中的每个对象都起作用。