I have the following code:
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();
When I open the test.dat file and unserialize the objects, I get all the objects. But if I change my code to this:
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();
Now when I read the objects, I only get the first one i.e. Object0. Can anyone please explain the behavior?
When you write an object to an
ObjectOutputStreamtwice, then the second time will just be written as a reference to the original data (“thatArrayListwith id x that I wrote before”).This happens even if the content of the object has changed (as it does in your case), therefore you will only have 1 full serialization (the first one) and 9 references to that in the second case.
You could call
ObjectOutputStream.reset()to discard the list of previously written objects and force it to do a full serialization again.