Java的ArrayList使用自定义序列化并显式写入大小。尽管如此,在ArrayList中,大小没有标记为瞬态(transient)。为什么大小会被写两次:一次通过defaultWriteObject方法,再次通过writeInt(size)方法(如下所示writeObject方法)?
s.defaultWriteObject();
// Write out size as capacity for behavioral compatibility with clone()
s.writeInt(size);
// Write out all elements in the proper order.
for (int i=0; i<size; i++) {
s.writeObject(elementData[i]);
}