数组列表在序列化后如何保留数据

时间:2018-10-10 02:14:09

标签: java serialization deserialization

在检查 java.util.ArrayList 实现时,请注意,即使ArrayList可序列化,arrayList侧面的元素数据对象数组也是瞬时

transient Object[] elementData; // non-private to simplify nested class access

那么arrayList如何通过保持elementData数组为瞬时来在反序列化过程中保留其数据?

1 个答案:

答案 0 :(得分:4)

标记成员transient并不意味着该字段不会被序列化,只是使用Java内置的字段的序列化机制不会自动序列化

如果ArrayList的序列化是通过自定义writeObject方法执行的:[src]

private void writeObject(java.io.ObjectOutputStream s)
    throws java.io.IOException {
    // Write out element count, and any hidden stuff
    int expectedModCount = modCount;
    s.defaultWriteObject();
    // Write out size as capacity for behavioural 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]);
    }
    if (modCount != expectedModCount) {
        throw new ConcurrentModificationException();
    }
}

使用readObject执行反序列化。