概念:
1)序列化一个对象时,被transient关键字修饰的变量(的值)不会被序列化。
ArrayList的序列化机制:
1)ArrayList实现了java.io.Serializable接口。
2)ArrayList中存放集合元素的Object数组被关键字transient修饰。代码:transient Object[] elementData;
3)ArrayList序列化集合元素的机制:
ArrayList在序列化时会调用writeObject(ObjectOutputStream s)方法,将size和element写入ObjectOutputStream中;
ArrayList在反序列化时调用readObject(java.io.ObjectInputStream s)方法,从ObjectInputStream中获取到size和element,再恢复到存储集合元素的Object数组中。
4)与直接序列化Object数组相比,这样的机制有什么优点呢?
elementData是一个Object数组,它通常会预留一些容量,等容量不足时再进行扩容;有些空间(elementData[size] ~ elementData[elementData.length-1])实际上并没有存储元素(存的是null);
ArrayList的序列化机制:只序列化实际存储的集合元素,而不是去实例化整个Object数组,从而节省空间和时间的消耗。
版权声明:本文为A__17原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。