English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Разница между сериализацией и внешнимizable в Java

Сериализация и внешняяализация - это процесс преобразования объектов в поток байтов и хранения потоков байтов в базе данных или памяти. Классы, реализующие интерфейс java.io.Serializable, могут быть сериализованы. С другой стороны, внешняяализация используется для пользовательской сериализации в зависимости от требований приложения. Внешняяализация расширяет java.io.Serializable. 

НомерКлючСериализацияВнешняя сериализация
1
Интерфейс
Сериализация - это маркер интерфейса 
Внешняя сериализация включает два метода readExternal и writeExternal. 
2 
Логическая реализация 
Классы, реализующие этот интерфейс, передают JVM ответственность за сериализацию или сохранение Java объекта. JVM использует readObject и writeObject для сериализации 
Внешняя сериализация предоставляет приложение логическим контролем через перезапись методов readExternal и writeExternal.
3 
Методы игнорирования переменных 
В процессе сериализации JVM игнорирует временные переменные Java объекта во время его сериализации и десериализации 
Программист может написать свою логику для игнорирования некоторых переменных в процессе внешней сериализации Java объекта 
4 
Производительность 
В интерфейсе Serializable использование反射 может привести к снижению производительности.
Внешняя сериализация позволяет полностью контролировать метод реализации. 
5 
Сериализация объектов с наследованием 
1. Если суперкласс не сереализуется, подкласс все еще может сереализоваться.
2. Если подкласс не сереализуется, но суперкласс может автоматически сереализоваться 
Мы также можем применить это к внешней сериализации.

Пример для внешней сериализации

class ExternalizableExample implements Externalizable {
   Integer id;
   @Override
   public void writeExternal(ObjectOutput out) throws IOException {
      out.writeInt(id);
   }
   @Override
   public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
      this.id = in.readInt();
   }
}

Пример для последовательной сериализации

class SerializableExample implements Serializable {
   private static final long serialVersionUID = 5081877L;
   String name;
}
Основной учебник
Вам может понравиться