Java 序列化中的不同行为
我有以下代码:Java 序列化中的不同行为,java,serialization,Java,Serialization,我有以下代码: 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(l
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();
现在,当我读取对象时,我只得到第一个对象,即Object0。有人能解释一下这种行为吗?这是因为在一种情况下,您使用的是10个对象实例,而在另一种情况下,您使用的是1个实例。您的
oo
只知道要持久化的对象的一个实例 当您将一个对象写入ObjectOutputStream
两次时,第二次将作为对原始数据的引用写入(“该ArrayList
,id为x,我以前写过”)
如果对象的内容发生了更改(在您的情况下也是如此),则会发生这种情况,因此在第二种情况下,只有1个完整序列化(第一个)和9个引用
您可以调用以放弃以前编写的对象列表,并强制它再次执行完整的序列化。Great post!我以前不知道。感谢您提高了我的序列化知识。
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();