Знание разницы между 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 в Java
- Руководство по реализации сериализуемого интерфейса Java
- Как происходит процесс десериализации в Java?
Пишите мне в комментариях свои вопросы, связанные с интерфейсами Externalizable и Serializable в Java.