Что такое Externalizable в Java?

Externalizable - это интерфейс, который позволяет вам определять пользовательские правила и собственный механизм для сериализации. Прежде чем понимать интерфейс Externalizable, вам нужно иметь представление о сериализации. Java Serialization предоставляет функции по умолчанию для хранения и последующего воссоздания объекта. Он использует сложный алгоритм для определения всех объектов, которые нужно сохранить. При сериализации JVM (виртуальная машина Java) полностью отвечает за весь процесс написания и чтения объектов. Это полезно в большинстве случаев, поскольку разработчикам не нужно заботиться об основных деталях процесса сериализации. Потому что по умолчанию все переменные экземпляра, кроме статических и переходных переменных, будут проходить процесс Serialization. Однако сериализация по умолчанию не защищает конфиденциальную информацию, такую как пароли и учетные данные, или что, если разработчики хотят обеспечить некоторую информацию во время процесса сериализации?

Интерфейс Externalizable фактически не обеспечивал оптимизацию производительности процесса сериализации, а предоставлял средства для реализации собственной пользовательской обработки и предлагал полный контроль над форматом и содержимым потока для объекта и его супертипов. Таким образом, экстернализация приходит, чтобы дать программистам полный контроль над чтением и записью объектов во время сериализации.

Как следует из названия, это является нарушением вашей сериализации. Он использует пользовательский письменный механизм для выполнения сортировки и разборки объектов. Интерфейс Externalizable расширяет интерфейс Serializable. Если вы реализуете этот интерфейс, вам необходимо переопределить следующие методы.

writeExternal (ObjectOutput out)

Объект должен реализовать этот метод, чтобы сохранить его состояние. Для примитивных типов вызываются методы класса ObjectOutput, тогда как для объектов, строк и массивов достаточно метода writeObject.

readExternal (ObjectInput in)

Объект реализует этот метод, чтобы восстановить его состояние. Метод readExternal должен читать все значения вместе с их типами в той же последовательности и формате, что и они были написаны методом writeExternal.

Пример

 
import Java.io.*;
public class TestClass implements Externalizable {
  public void writeExternal(ObjectOutput out) {
    // реализовать собственный код для записи объектов этого класса
  }
  public void readExternal(ObjectInput in) {
    // реализовать собственный код для чтения сериализованных объектов этого класса
  }
}
import Java.io. *;
Открытый класс TestClass реализует Externalizable {
   public void writeExternal (ObjectOutput out) {
     // реализовать собственный код для записи объектов этого класса
   }
   public void readExternal (ObjectInput in) {
     // реализовать собственный код для чтения сериализованных объектов этого класса
   }
}

...

В более старой версии Java отражение было очень медленным, и поэтому сериализация больших графов объектов столкнулась с проблемой производительности. Чтобы справиться с этой ситуацией, был предоставлен интерфейс Java.io.Externalizable, который похож на Java.io.Serializable, но с настраиваемыми механизмами для выполнения функций маршаллинга и unmarshalling. В последних версиях Java производительность отражения намного лучше, чем раньше, и поэтому это гораздо менее проблематично. Таким образом, в редких случаях, когда вы действительно хотите сохранить и перестроить свой объект, используется внешняя система, и без использования механизмов сериализации по умолчанию для полей данных. Подробнее ... Сериализация Java

Источник: http://net-informations.com/Java/cJava/externalizable.htm

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector