序列化中的不同行为

| 我有以下代码:
ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(\"test.dat\"));
ArrayList<String> list = null;
for(int i = 0; i < 10; i++)
{
    list = new ArrayList<String>();
    list.add(\"Object\" + i);
    oo.writeObject(list);
}
oo.close();
当我打开test.dat文件并将对象“ 1”打开时,我得到了所有对象。但是,如果我将代码更改为此:
ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(\"test.dat\"));
ArrayList<String> list = new ArrayList<String>();
for(int i = 0; i < 10; i++)
{
    list.clear(); //clear the earlier objects
    list.add(\"Object\" + i);
    oo.writeObject(list);
}
oo.close();
现在,当我读取对象时,我只会得到第一个对象,即Object0。谁能解释这个行为?     
已邀请:
当您将一个对象两次写入
ObjectOutputStream
时,第二次写入将只是对原始数据的引用(\“那是我之前写过的ID为x的
ArrayList
\”)。 即使对象的内容发生了更改(发生这种情况),也会发生这种情况,因此,在第二种情况下,您将只有1个完整的序列化(第一个)和9个对它的引用。 您可以调用ѭ5放弃先前写入的对象列表,并强制其再次进行完全序列化。     
这是因为在一种情况下,您正在使用10个对象实例,而在另一种情况下,您正在使用1个实例。您的
oo
仅知道该对象的1个实例可以保留。     

要回复问题请先登录注册