Bevezetés

Serialization az átalakítás az állam egy objektum egy byte patak; deserialization nem az ellenkezője. Másként fogalmazva, a serialization egy Java objektum átalakítása statikus bájtfolyammá (szekvenciává), amelyet ezután adatbázisba lehet menteni vagy hálózaton keresztül továbbítani.

Serialization and Deserialization

a serialization process is instance-independent, azaz., az objektumok egy platformon szerializálhatók, a másikon pedig dezerializálhatók. A sorosításra jogosult osztályoknak egy speciális marker interfészt kell végrehajtaniuk.

mind az ObjectInputStream, mind az ObjectOutputStream magas szintű osztályok, amelyek kiterjesztik a java.io.InputStream, illetve a java.io.OutputStream osztályokat. ObjectOutputStream írhat primitív típusú grafikonok objektumok egy OutputStream, mint egy patak bájt. Ezek a patakok később olvasható ObjectInputStream.,

az ObjectOutputStream legfontosabb módszere a következő:

public final void writeObject(Object o) throws IOException;

, amely egy sorosítható objektumot vesz fel, és bájtsorozattá alakítja (stream). Hasonlóképpen, az ObjectInputStream legfontosabb módszere a következő:

public final Object readObject() throws IOException, ClassNotFoundException;

, amely képes olvasni egy bájtfolyamot, majd átalakítani Java objektummá. Ezt ezután vissza lehet vetni az eredeti tárgyra.

illusztráljuk a szerializációt egy Személycsoporttal. Vegye figyelembe, hogy a statikus mezők egy osztályhoz tartoznak (szemben egy objektummal), és nem sorosak., Vegye figyelembe azt is, hogy a transient kulcsszóval figyelmen kívül hagyhatjuk az osztálymezőket a sorosítás során:

public class Person implements Serializable { private static final long serialVersionUID = 1L; static String country = "ITALY"; private int age; private String name; transient int height; // getters and setters}

az alábbi teszt egy példát mutat egy személy típusú objektum mentésére egy helyi fájlba, majd olvassa el ezt az értéket vissza:

az ObjectOutputStream-t használtuk az objektum állapotának fájlba mentéséhez FileOutputStream segítségével. A fájl ” yourfile.a ” TXT ” a projekt könyvtárában jön létre. Ezt a fájlt a FileInputStream segítségével tölti be. Az ObjectInputStream felveszi ezt az adatfolyamot, és egy P2 nevű új objektummá alakítja.,

végül teszteljük a betöltött objektum állapotát, amely megegyezik az eredeti objektum állapotával.

vegye figyelembe, hogy a betöltött objektumot kifejezetten egy Személytípusra kell dobni.

Java Serialization Caveats

vannak olyan figyelmeztetések, amelyek a Java serializációjára vonatkoznak.

3.1. Öröklés és összetétel

amikor egy osztály implementálja a java. io. Serializable interfészt, minden alosztálya sorosítható is., Épp ellenkezőleg, ha egy tárgy, egy hivatkozás egy másik objektum, ezek a tárgyak végre kell hajtania a Serializable interfészt külön-külön, vagy egy NotSerializableException kell dobni:

public class Person implements Serializable { private int age; private String name; private Address country; // must be serializable too}

Ha az egyik terület a serializable tárgy áll, egy sor tárgyakat, akkor ezeket a tárgyakat kell serializable is, különben egy NotSerializableException kell dobni.

3.2. Soros változat UID

a JVM társít egy változat (hosszú) számot minden szerializálható osztály., Annak ellenőrzésére szolgál, hogy a mentett és betöltött objektumok azonos attribútumokkal rendelkeznek-e, és így kompatibilisek-e a sorozatosítással.

ezt a számot a legtöbb ide automatikusan generálhatja, és az osztálynéven, attribútumain és a hozzá tartozó hozzáférési módosítókon alapul. Bármely változás más számot eredményez, ami InvalidClassException-t okozhat.

Ha egy serializable osztály nem deklarál serialVersionUID-ot, a JVM automatikusan generál egyet futásidőben., Erősen ajánlott azonban, hogy minden osztály deklarálja a serialVersionUID-ot, mivel a generált fordító függő, így váratlan Invalidclassexpections-t eredményezhet.

3, 3. Egyéni Serialization Java

Java megadja az alapértelmezett módot, amelyben az objektumok sorosíthatók. A Java osztályok felülbírálhatják ezt az alapértelmezett viselkedést. Az egyéni sorosítás különösen hasznos lehet egy olyan objektum sorosításakor, amely néhány nem szerializálható attribútummal rendelkezik., Ezt meg lehet tenni azáltal, hogy két módszer belül az osztály, hogy szeretnénk serialize:

private void writeObject(ObjectOutputStream out) throws IOException;

a

private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException;

A fenti módszerek lehet, vagy azok unserializable attribútumok más formában lehet fejezetei:

public class Address { private int houseNumber; // setters and getters}

A következő egység a vizsgálat az egyéni sorozatkészítés:

ebben A kód, azt látjuk, hogy megmentse egy kis unserializable attribútumok által serializing Cím egyéni sorozatkészítés. Ne feledje,hogy meg kell jelölni a megbízhatatlan attribútumok tranziens, hogy elkerüljék a NotSerializableException.,

Következtetés

ebben A gyors bemutató, átnéztük a Java sorszámozás, megvitatták a legfontosabb dolog, hogy tartsa szem előtt, de megmutatták, hogyan kell csinálni egyéni sorozatkészítés.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük