Как arraylist сохраняют данные после сериализации - PullRequest
0 голосов
/ 10 октября 2018

При проверке java.util.ArrayList реализация замечает, что массив объектов данных элемента в стороне arrayList равен transient , хотя ArrayList является сериализуемым.

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

Так как arrayList сохраняет свои данные в процессе десериализации , сохраняя массив elementData transient ?

1 Ответ

0 голосов
/ 10 октября 2018

Пометка элемента 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.

...