"Hej, Amigo! Jag skulle vilja lägga till lite till vad Ellie sa till dig."

Ibland behöver du kontrollera serialiseringsprocessen. Här är några anledningar till varför:

1) Ett objekt är inte redo för serialisering : dess nuvarande interna tillstånd håller på att förändras.

2) Ett objekt innehåller icke-serialiserbara objekt, men kan konvertera dem till en form som lätt kan serialiseras, t.ex. spara dem som en byte-array eller något annat.

3) Ett objekt vill deserialisera all sin data som en enhet och/eller kryptera den före serialisering.

Det finns många anledningar till att du kanske vill utföra serialisering manuellt. Men vi vill inte förlora alla fördelar som standard serialisering erbjuder. Vårt objekt kan trots allt använda andra objekt. Men de kan inte serialiseras om vårt objekt inte stöder serialisering.

Denna situation har också en lösning: det externa gränssnittet. Vi måste tacka Javas visionära skapare. Byt bara ut det serialiseringsbara gränssnittet med det externa gränssnittet så kan din klass hantera serialiseringsprocessen manuellt.

Det Externalizable- gränssnittet har två metoder, vilket det Serializable -gränssnittet inte har, som anropas av Java-maskinen när ett objekt serialiseras. Så här ser det ut:

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

Påminna dig om något?

"Holy moly! Det är precis så vi försökte rädda föremål innan vi övervägde serialisering."

"Detta gör allt enkelt: om standardserialisering är tillräcklig ärver vi bara det serialiserade gränssnittet. Om det inte är tillräckligt, så ärver vi Externalizable och skriver vår egen kod för att spara/ladda in vårt objekt."

"Men anses en klass märkt Externalizable serialiserbar? Kan vi använda en sådan klass för att "säkert" lagra referenser till våra serialiserbara klasser?"

"Ja. Om en klass implementerar Serializable eller Externalizable , anses den serialiserbar."

"Det är den perfekta lösningen. Jag gillar det."

"Jag är glad att höra det. Men det är mer... Du borde fråga professor Hans om alla nyanser. De finns säkert. Han ville ge dig något att läsa."