ArrayList 中的数组定义如下:
private transient Object[] elementData;
再看一下 ArrayList 的定义:
public class Arraylist
implements List
可以看到 Arraylist 实现了 Serializable 接口,这意味着 ArrayList 支持序列化。transient 的作用是说不希望 elementData 数组被序列化,重写了writeObject 实现:
private void write0bject(java.io.ObjectOutputStream s) throws java.io.IOException{
// Write out element count, and any hidden stuff
int expectedModCount = modCount;
s.defaultWriteObject();
// Write out array length
s.writeInt(elementData.length);
// Write out all elements in the proper order.
for (int i=O; i<size; i++)
s.writeObject(elementData[i]);
if (modCount != expectedModCount){
throw new ConcurrentModificationException();
}
每次序列化时,先调用 defaultWriteObject()方法序列化 ArrayList 中的非 transient 元素,然后遍历 elementData,只序列化已存入的元素,这样既加快了序列化的速度,又减小了序列化之后的文件大小。
Was this helpful?
0 / 0