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