"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:
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."