Для этого есть сериализация. Она преобразует объект в набор байтов, чтобы его можно было передать или сохранить. Обратная операция — десериализация, которая восстанавливает объект из этих байтов.
Каждый класс, поддерживающий
Serializable, имеет serialVersionUID. Это идентификатор версии. При десериализации Java проверяет, совпадает ли UID в данных с тем, что в классе. Если совпадает — объект принимается. Если нет — выбрасывается InvalidClassException.Что будет, если класс изменился после того, как некоторые объекты уже были сериализованы?
- Добавлено поле → старые объекты работают, новое поле получает значение по умолчанию (0, null, false).
- Удалено поле → старые данные для него игнорируются.
- Изменён тип поля → ломается.
- Изменён UID → ломается.
Если UID не определить явно, JVM сгенерирует его автоматически на основе деталей класса (поля, методы, модификаторы). Даже небольшое изменение, например переименование поля, изменит UID и сделает старые данные несовместимыми.
Рекомендую всегда задавать
serialVersionUID вручную. Это даёт контроль над совместимостью и избавляет от неожиданных ошибок.👉 Java Portal
