"Hej, Amigo! Jeg vil gerne tilføje lidt til det, Ellie fortalte dig."

Nogle gange har du brug for at kontrollere serialiseringsprocessen. Her er nogle af grundene til:

1) Et objekt er ikke klar til serialisering : dets aktuelle interne tilstand er ved at ændre sig.

2) Et objekt indeholder ikke-serialiserbare objekter, men kan konvertere dem til en form, der let kan serialiseres , f.eks. gemme dem som en byte-array eller noget andet.

3) Et objekt ønsker at deserialisere alle sine data som én enhed og/eller at kryptere dem før serialisering.

Der er mange grunde til, at du måske ønsker at udføre serialisering manuelt. Men vi ønsker ikke at miste alle de fordele, som standard serialisering tilbyder. Vores objekt kan trods alt bruge andre objekter. Men de kan ikke serialiseres, hvis vores objekt ikke understøtter serialisering.

Denne situation har også en løsning: Eksternaliserbar grænseflade. Vi skal takke Javas visionære skabere. Du skal blot udskifte Serializable- grænsefladen med Externalizable -grænsefladen, og din klasse kan styre serialiseringsprocessen manuelt.

Den Eksternaliserbare interface har to metoder, som Serializable -grænsefladen ikke har, som kaldes af Java-maskinen, når et objekt serialiseres. Sådan ser det ud:

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

Minde dig om noget?

"Holy moly! Det er præcis sådan, vi forsøgte at redde objekter, før vi overvejede serialisering."

"Dette gør alt simpelt: Hvis standardserialisering er tilstrækkelig, arver vi bare Serializable- grænsefladen. Hvis det ikke er tilstrækkeligt, så arver vi Externalizable og skriver vores egen kode for at gemme/indlæse vores objekt."

"Men betragtes en klasse mærket Eksternaliserbar som serialiserbar? Kan vi bruge sådan en klasse til "sikkert" at gemme referencer til vores serialiserbare klasser?"

"Ja. Hvis en klasse implementerer Serializable eller Externalizable , anses den for at kunne serialiseres."

"Det er den perfekte løsning. Jeg kan godt lide det."

"Det er jeg glad for at høre. Men der er mere i det... Du skulle spørge professor Hans om alle nuancerne. De findes bestemt. Han ville gerne give dig noget at læse."