CodeGym /Java курс /Java Core /Запазване на данни/Външни

Запазване на данни/Външни

Java Core
Ниво , Урок
На разположение

"Здравей, Амиго! Бих искал да добавя малко към това, което ти каза Ели."

Понякога трябва да контролирате процеса на сериализация. Ето някои от причините защо:

1) Обектът не е готов за сериализиране : текущото му вътрешно състояние е в процес на промяна.

2) Един обект съдържа обекти, които не могат да бъдат сериализирани, но може да ги преобразува във форма, която може лесно да бъде сериализирана , например да ги запишете като byteов масив or нещо друго.

3) Обектът иска да десериализира всички свои данни като една единица и/or да ги шифрова преди сериализирането.

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

Тази ситуация също има решение: Externalizable интерфейс. Трябва да благодарим на далновидните създатели на Java. Просто заменете Serializable интерфейса с Externalizable интерфейса и вашият клас може да управлява процеса на сериализиране ръчно.

Интерфейсът Externalizable има два метода, които интерфейсът Serializable няма, които се извикват от Java машината, когато даден обект е сериализиран. Ето How изглежда:

Код
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 и пишем наш собствен code, за да запазим/заредим нашия обект.“

"Но клас, означен като Externalizable , смята ли се за сериализуем? Можем ли да използваме такъв клас за "безопасно" съхраняване на препратки към нашите сериализируеми класове?"

"Да. Ако даден клас имплементира Serializable or Externalizable , той се счита за сериализуем."

"Това е идеалното решение. Харесва ми."

„Радвам се да чуя това. Но има още нещо... Трябва да попитате професор Ханс за всички нюанси. Те със сигурност съществуват. Той искаше да ви даде нещо за четене.“

Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION