Назад Зміст Вперед

1.5. Інтерфейс Externalizable

Іноді буває потрібно управляти процесом серіалізації. Ось одні з причин:
  1. Об'єкт не готовий до серіалізації: його теперішній внутрішній стан в процесі зміни.
  2. Об'єкт містить несереалізовані об'єкти, але може перевести їх в зручну для серіалізації форму: зберегти в масив байт або що-небудь ще.
  3. Об'єкт хоче десеріалізувати всі свої дані, як одне ціле і / або зашифрувати їх перед серіалізацією.

Причин виконати серіалізацію в ручному режимі може бути безліч. Але не хотілося б втрачати всіх тих переваг, які дає стандартна серіалізація. Адже, об'єкти можуть використовувати інші об'єкти. І вони теж не зможуть бути серіалізовані, якщо об'єкт відмовиться від підтримки серіалізації.

На цей випадок теж є рішення - інтерфейс Externalizable. Досить замінити інтерфейс Serializable на інтерфейс Externalizable, і клас зможе управляти процесом серіалізації в ручному режимі.

Інтерфейс Externalizable, на відміну від Serializable, містить два методи, які викликаються Java-машиною при серіалізації об'єкта:
Код
class Cat implements Externalizable
{
 public
 String name;
 public
 int age;
 public
 int weight;

 
public void writeExternal(ObjectOutput out)
 {
  
out.writeObject(name);
  
out.writeInt(age);
  
out.writeInt(weight);
}

 
public void readExternal(ObjectInput in)
 {
  name = (String)
 in.readObject();
  age =
 in.readInt();
  weight =
 in.readInt();
 }
}

Якщо влаштовує стандартна серіалізація - просто успадковуємо клас від інтерфейсу Serializable. Якщо не влаштовує - успадковуємо від Externalizable і пишемо код для збереження / завантаження об'єкта нашого класу.

Якщо клас реалізує інтерфейс Serializable або Externalizable, він вважається серіалізованим.
.