"Ciao, Amigo! Vorrei aggiungere qualcosa a quello che ti ha detto Ellie."

A volte è necessario controllare il processo di serializzazione. Ecco alcuni dei motivi per cui:

1) Un oggetto non è pronto per la serializzazione : il suo attuale stato interno sta cambiando.

2) Un oggetto contiene oggetti non serializzabili, ma può convertirli in una forma che può essere facilmente serializzata , ad esempio salvandoli come array di byte o qualcos'altro.

3) Un oggetto vuole deserializzare tutti i suoi dati come un'unica unità e/o crittografarli prima della serializzazione.

Ci sono molti motivi per cui potresti voler eseguire la serializzazione manualmente. Ma non vogliamo perdere tutti i vantaggi offerti dalla serializzazione standard. Dopotutto, il nostro oggetto potrebbe usare altri oggetti. Ma non possono essere serializzati se il nostro oggetto non supporta la serializzazione.

Anche questa situazione ha una soluzione: l' interfaccia Externalizable . Dobbiamo ringraziare i creatori visionari di Java. Sostituisci semplicemente l' interfaccia Serializable con l' interfaccia Externalizable e la tua classe può gestire manualmente il processo di serializzazione.

L' interfaccia Externalizable dispone di due metodi, diversi dall'interfaccia Serializable , che vengono richiamati dalla macchina Java quando un oggetto viene serializzato. Ecco come appare:

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

Ti ricordi qualcosa?

"Santo cielo! Questo è esattamente il modo in cui abbiamo cercato di salvare gli oggetti prima di prendere in considerazione la serializzazione."

"Questo rende tutto semplice: se la serializzazione standard è adeguata, ereditiamo semplicemente l' interfaccia Serializable . Se non è adeguata, ereditiamo Externalizable e scriviamo il nostro codice per salvare/caricare il nostro oggetto."

"Ma una classe contrassegnata come Externalizable è considerata serializzabile? Possiamo usare una classe del genere per memorizzare" in modo sicuro "riferimenti alle nostre classi serializzabili?"

"Sì. Se una classe implementa Serializable o Externalizable , è considerata serializzabile."

"È la soluzione perfetta. Mi piace."

"Sono felice di sentirlo. Ma c'è dell'altro... Dovresti chiedere al professor Hans tutte le sfumature. Certamente esistono. Voleva darti qualcosa da leggere."