CodeGym /Tanfolyamok /Java Core /Adatmentés/Externalizálható

Adatmentés/Externalizálható

Java Core
Szint , Lecke
Elérhető

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

Hozzászólások
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION