"Szia Amigo! Szeretnék egy kicsit hozzátenni ahhoz, amit Ellie mondott."

Néha vezérelnie kell a sorozatosítási folyamatot. Íme néhány ok, amiért:

1) Egy objektum nem áll készen a szerializálásra : jelenlegi belső állapota változás alatt áll.

2) Egy objektum nem szerializálható objektumokat tartalmaz, de könnyen szerializálható formává alakíthatja őket , pl. elmentheti bájttömbként vagy valami másként.

3) Egy objektum az összes adatát egyetlen egységként kívánja deszerializálni és/vagy titkosítani szeretné a szerializálás előtt.

Számos oka lehet annak, hogy miért érdemes manuálisan végrehajtani a sorozatosítást. De nem akarjuk elveszíteni a szabványos szerializálás által kínált összes előnyt. Elvégre objektumunk más objektumokat is használhat. De nem szerializálhatók, ha az objektumunk nem támogatja a szerializálást.

Erre a helyzetre is van megoldás: az Externalizálható felület. Köszönetet kell mondanunk a Java látnoki alkotóinak. Egyszerűen cserélje ki a Serializálható felületet az Externalizálható felületre, és az osztály manuálisan kezelheti a szerializálási folyamatot.

Az Externalizálható interfésznek két metódusa van, amelyeket a Sorosozható felület nem, amelyeket a Java gép hív meg, amikor egy objektumot szerializálnak. Így néz ki:

Kód
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();
 }
}

Emlékeztet valamire?

"Holy Moly! Pontosan így próbáltuk meg menteni az objektumokat, mielőtt a sorozatosításra gondoltunk volna."

"Ez mindent egyszerűvé tesz: ha a szabványos szerializálás megfelelő, akkor csak a Serializable felületet örököljük . Ha nem megfelelő, akkor örököljük az Externalizálhatót , és saját kódot írunk az objektum mentéséhez/betöltéséhez."

"De az Externalizable megjelölésű osztályt szerializálhatónak tekintjük? Használhatunk egy ilyen osztályt a sorosozható osztályainkra mutató hivatkozások "biztonságos" tárolására?"

"Igen. Ha egy osztály megvalósítja a Serializable vagy Externalizable funkciót , akkor szerializálhatónak minősül."

"Ez a tökéletes megoldás. Tetszik."

"Örülök, hogy ezt hallom. De ennél többről van szó... Meg kell kérdeznie Hans professzort az összes árnyalatról. Biztosan léteznek. Valami olvasnivalót akart adni."