Подтвердить что ты не робот

Статические правила сериализации Java?

Я работаю над сериализацией состояния сохранения с помощью нескольких статических методов и полей. Я мог бы поклясться, что эта сериализация и статический причиненный хаос. Должен ли я делать все статические переходные процессы? И будет ли раздувание вызовов восстанавливать статику как обычно?

4b9b3361

Ответ 1

static неявно transient, поэтому вам не нужно объявлять их как таковые.

Сериализация предназначена для сериализации экземпляров, а не классов. static (методы неактуальны, поскольку они являются частью определения класса, поэтому они не сериализованы) будут повторно инициализированы до того значения, которое они устанавливают при загрузке класса.

Если у вас есть изменяемое поле static, изменения, внесенные в это значение, будут потеряны.

Ответ 2

static поля игнорируются для сериализации.

Обновлено, чтобы сказать static, а не transient, как я изначально планировал...

Ответ 3

Краткими правилами могут быть следующие:  

1. static переменная не сохраняется во время сериализации. И наоборот, во время процесса де-сериализации переменные static начинаются с инициализации уровня класса.  

2. static и transient переменные на основе ключевых слов игнорируются во время сериализации.

3. Имя класса и serialVersionUID обе сериализуются как поток байтов, а при де-сериализации serialVersionUID, считанный из источника, сравнивается с локальной переменной класса static. Вот почему serialVersionUID объявляется как static public final, так что для сравнения этих версийUID не требуется создавать дополнительный объект.

  • Если в случае обнаружения какой-либо разницы, InvalidClassException произойдет.

Ответ 4

static поля не сериализованы.

Ответ 5

"Когда вы сериализуете экземпляр класса, единственными, которые сохраняются, являются данные нестатического и непереходного экземпляра. Определения классов не сохраняются. Они должны быть доступны, когда вы пытаетесь десериализовать объект" http://java.sun.com/developer/technicalArticles/ALT/serialization/