Разница между Externalizable и Serializable в Java

Знание разницы между Externalizable и Serializable имеет важное значение при собеседовании, и мы можем использовать эти знания для принятия более обоснованных решений по повышению производительности при применении сериализации в нашем приложении.

1. Экстернализуемые и сериализуемые

Давайте перечислим основные различия между интерфейсами Externalizable и Serializable в Java.

Сериализуемый Экстернализируемый
Serializable — это маркерный интерфейс, т.е. не содержит никаких методов. Интерфейс Externalizable включает два метода writeExternal() и readExternal(), которые реализующие классы ДОЛЖНЫ переопределять.
Интерфейс Serializable передает ответственность за сериализацию JVM и ее алгоритму по умолчанию. Externalizable предоставляет программисту возможность управлять логикой сериализации, что позволяет ему писать собственную логику.
В большинстве случаев сериализацию по умолчанию реализовать легко, но она имеет более высокие затраты производительности. Сериализация, выполненная с использованием Externalizable, возлагает большую ответственность на программиста, но часто приводит к повышению производительности.
Трудно анализировать и изменять структуру класса, поскольку любое изменение может нарушить сериализацию. Анализировать и изменять структуру классов проще благодаря полному контролю над логикой сериализации.
Сериализация по умолчанию не вызывает ни один конструктор класса. При использовании интерфейса Externalizable требуется открытый конструктор без аргументов.

Обратите внимание, что интерфейс Externalizable является дочерним интерфейсом Serializable, т.е. Externalizable расширяет Serializable. Поэтому если какой-либо класс реализует интерфейс Externalizable и переопределяет его методы writeExternal() и readExternal(), то первое предпочтение отдается этим методам по сравнению с механизмом сериализации по умолчанию, предоставляемым JVM.

Подробнее:Как переопределить механизм сериализации по умолчанию в Java

2. Узнайте больше о Externalizable и Serializable

Пишите мне в комментариях свои вопросы, связанные с интерфейсами Externalizable и Serializable в Java.

Прокрутить вверх