"Hallo, Amigo! Ik wil graag iets toevoegen aan wat Ellie je heeft verteld."

Soms moet u het serialisatieproces beheersen. Hier zijn enkele redenen waarom:

1) Een object is niet gereed voor serialisatie : de huidige interne status is aan het veranderen.

2) Een object bevat niet-serialiseerbare objecten, maar kan ze omzetten in een vorm die gemakkelijk kan worden geserialiseerd , bijvoorbeeld door ze op te slaan als een byte-array of iets anders.

3) Een object wil al zijn gegevens als één eenheid deserialiseren en/of deze vóór serialisatie versleutelen.

Er zijn veel redenen waarom u serialisatie handmatig wilt uitvoeren. Maar we willen niet alle voordelen verliezen die standaardserialisatie biedt. Ons object kan immers andere objecten gebruiken. Maar ze kunnen niet worden geserialiseerd als ons object geen serialisatie ondersteunt.

Ook voor deze situatie is er een oplossing: de Externalisable interface. We moeten de visionaire makers van Java bedanken. Vervang gewoon de Serializable- interface door de Externalisable -interface en uw klas kan het serialisatieproces handmatig beheren.

De Externalizable- interface heeft twee methoden, die de Serializable- interface niet heeft, die worden aangeroepen door de Java-machine wanneer een object wordt geserialiseerd. Zo ziet het eruit:

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

Herinner je je ergens aan?

"Holy moly! Dit is precies hoe we objecten probeerden te redden voordat we serialisatie overwogen."

"Dit maakt alles eenvoudig: als standaardserialisatie adequaat is, erven we gewoon de Serializable- interface. Als het niet adequaat is, erven we Externalizable en schrijven we onze eigen code om ons object op te slaan/te laden."

"Maar wordt een klasse gemarkeerd als Externalizable beschouwd als serialiseerbaar? Kunnen we zo'n klasse gebruiken om referenties naar onze serialiseerbare klassen "veilig" op te slaan?"

"Ja. Als een klasse Serializable of Externalizable implementeert , wordt deze als serialiseerbaar beschouwd."

"Het is de perfecte oplossing. Ik vind het leuk."

'Daar ben ik blij om te horen. Maar er is meer... Je zou professor Hans naar alle nuances moeten vragen. Die zijn er zeker. Hij wilde je iets te lezen geven.'