"Bună, Amigo! Aș vrea să adaug puțin la ceea ce ți-a spus Ellie."

Uneori trebuie să controlați procesul de serializare. Iată câteva dintre motivele pentru care:

1) Un obiect nu este pregătit pentru serializare : starea sa internă actuală este în proces de schimbare.

2) Un obiect conține obiecte neserializabile, dar le poate converti într-o formă care poate fi serializată cu ușurință , de exemplu, salvați-le ca o matrice de octeți sau altceva.

3) Un obiect dorește să-și deserializeze toate datele ca o singură unitate și/sau să le cripteze înainte de serializare.

Există multe motive pentru care ați putea dori să efectuați serializarea manual. Dar nu vrem să pierdem toate avantajele pe care le oferă serializarea standard. La urma urmei, obiectul nostru ar putea folosi alte obiecte. Dar ele nu pot fi serializate dacă obiectul nostru nu acceptă serializarea.

Această situație are și o soluție: interfața Externalizabilă . Trebuie să mulțumim creatorilor vizionari ai Java. Pur și simplu înlocuiți interfața Serializable cu interfața Externalizable , iar clasa dvs. poate gestiona procesul de serializare manual.

Interfața Externalizable are două metode, pe care nu le are interfața Serializable , care sunt apelate de mașina Java atunci când un obiect este serializat. Așa arată:

Cod
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();
 }
}

Îți amintești de ceva?

"Holy Moly! Exact așa am încercat să salvăm obiecte înainte de a ne gândi la serializare."

„Acest lucru face totul simplu: dacă serializarea standard este adecvată, doar moștenim interfața Serializable . Dacă nu este adecvată, atunci moștenim Externalizable și scriem propriul nostru cod pentru a salva/încărca obiectul nostru.”

„Dar o clasă marcată Externalizabil este considerată serializabilă? Putem folosi o astfel de clasă pentru a stoca „în siguranță” referințe la clasele noastre serializabile?”

"Da. Dacă o clasă implementează Serializable sau Externalizable , este considerată serializabil."

"Este soluția perfectă. Îmi place."

"Mă bucur să aud asta. Dar mai e mai mult... Ar trebui să-l întrebi pe profesorul Hans despre toate nuanțele. Cu siguranță există. A vrut să-ți dea ceva de citit."