Чем Externalizable отличается от Serializable?

Я прочитал это

Externalizable предоставляет нам методы writeExternal() и readExternal(), которые дают нам гибкость в управлении механизмом сериализации Java вместо того, чтобы полагаться на сериализацию Java по умолчанию.

Но если я реализую Serializable и переопределить readObject(), writeObject(), тогда не значит ли это то же самое, что я настраиваю процесс сериализации?

Чем он отличается?

Благодарю.

2 ответа

Решение

Разница между экстернализуемым и сериализуемым

  1. В случае Serializable используется процесс сериализации по умолчанию. тогда как в случае Externalizable используется пользовательский процесс сериализации, который реализуется приложением.
  2. JVM возвращает функцию readExternel() и writeExternal() интерфейса java.io.Externalizalbe для восстановления и записи объектов в постоянство.
  3. Внешний интерфейс обеспечивает полный контроль процесса сериализации для приложения.
  4. readExternal () и writeExternal() заменяют любую конкретную реализацию методов writeObject и readObject.

Хотя Externalizable обеспечивает полный контроль, он также создает проблемы для сериализации состояния супертипа и заботится о значениях по умолчанию в случае переходных и статических переменных в Java. При правильном использовании интерфейс Externalizable может улучшить производительность процесса сериализации.

Так что перейдите на интерфейс Externalizable

Когда у вас есть особые требования для сериализации объекта. Например, у вас могут быть некоторые чувствительные к безопасности части объекта, такие как пароли, которые вы не хотите хранить и передавать куда-либо. Или может быть бесполезно сохранять конкретный объект, на который есть ссылка из основного объекта, потому что его значение станет бесполезным после восстановления.

Официальные документы по сохранению бобов

Реализуйте writeObject, когда вам нужно лучше контролировать то, что сериализуется, когда вам нужно сериализовать объекты, которые сериализация по умолчанию не может обработать, или когда вам нужно добавить данные в поток сериализации, который не является членом данных объекта. Реализуйте readObject, чтобы восстановить поток данных, который вы написали с помощью writeObject.

Используйте интерфейс Externalizable, когда вам нужен полный контроль над сериализацией вашего компонента (например, при записи и чтении определенного формата файла). Чтобы использовать интерфейс Externalizable, вам необходимо реализовать два метода: readExternal и writeExternal. Классы, которые реализуют Externalizable, должны иметь конструктор без аргументов.

Другие вопросы по тегам