Serializable
(Externalizable
), и цель записи/источник чтения ObjectInputStream
/ObjectOutputStream
(ObjectInput
/ObjectOutput
).Класс сериализуем, если:
🔘 Реализует маркерный интерфейс
Serializable
;🔘 Все поля сериализуемые или помечены модификатором
transient
(иначе рантайм выбросит NotSerializableException
).Протокол стандартной сериализации описан в документации.
Сериализационная форма может, и в некоторых случаях для корректной работы должна быть кастомизирована. Правильная форма содержит только логическое представление данных, без деталей о физической реализации.
Для описания полей сериализационной формы в javadoc-документации используется тег
@serial
. Для документации генерирующего нестандартную сериализационную форму метода используется @serialData
. Эти теги имеют смысл и для приватных членов, так как эффективно такие члены – часть публичного API.Нестатические внутренние классы не должны быть сериализуемыми. Статические поля как поля класса а не инстанса несериализуемы.
Сериализации посвящен целый раздел Effective Java. Доклад для ознакомления с темой.