arraylist如何在序列化后持久保存数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arraylist如何在序列化后持久保存数据相关的知识,希望对你有一定的参考价值。

当检查java.util.ArrayList实现时,注意到arrayList中的元素数据对象数组是瞬态的,即使ArrayList是可序列化的。

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

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

答案

标记成员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进行反序列化。

以上是关于arraylist如何在序列化后持久保存数据的主要内容,如果未能解决你的问题,请参考以下文章

持久化存储

Android Parcelable反序列化报错笔记:java.lang.RuntimeException: Unmarshalling unknown type code at offset(代码片

在 Java 中序列化和保存 double [] 的 ArrayList

Zookeeper 持久化序列化简介

自定义对象的 Android ArrayList - 保存到 SharedPreferences - 可序列化?

fastjson