Szerializáció Java-ban

A sorosítás a Java-ban olyan mechanizmus, amely az objektum állapotát bájtfolyammá alakítja. A deszerializáció fordított folyamata. A érdemesítés révén, bájt adatfolyamból, a memória a tényleges Java objektumot hozza létre. Egy ilyen mechanizmus megőrzi a tárgyat.

Az így létrehozott byte-folyam a szerializációtól nem függ egy platformon. Az egyik platformon sorosított objektum anélkül, hogy bármilyen kérdést feltehetne, bármilyen más platformon felhasználható. Így a sorosítás és az érdeklődés teljes folyamata JVM-től független.

Ha egy osztályobjektumot sorba kell állítani, akkor be kell állítania a java.io.Serializable felületet. A Java-ban sorozható egy marker interfész. Nincs mező vagy megvalósítási módszer. Az osztály sorozhatóvá teszi ezt a folyamatot, amely úgy néz ki, mint egy opt-in folyamat.

A Java sorozatba állítását az ObjectInputStream és ObjectOutputStream két osztály valósítja meg.

Ehhez csak egy burkolólapra van szükség, amely fájlba menthető, vagy hálózaton keresztül elküldhető.

A szérializáció fogalma Java-ban

Az ObjectOutputStream osztály, amely a fenti szakaszban említett sorosítási osztály, számos írási módszert tartalmaz különféle adattípusok írására, de az egyik módszer a legnépszerűbb

public final void writeObject(Object x) throws IOException

A fenti módszer felhasználható egy objektum sorosítására. Ez a módszer továbbítja a kimeneti adatfolyamhoz. Ugyanígy, az ObjectInputStream osztály tartalmazza az objektumok méltányossá tételének módszerét

public final Object readObject() throws IOException, ClassNotFoundException

A ansializációs módszer lehívja az objektumot egy adatfolyamból, és ugyanazt a ansializálást végzi. A visszatérési érték ismét objektum, tehát csak annyit kell tennie, hogy a releváns adattípushoz adja.

Ahhoz, hogy egy osztály sikeresen sorosodjon, két feltételnek kell teljesülnie -

  • io. A soroztatható interfészt az osztálynak kell megvalósítania.
  • Az osztály minden mezőjének sorosíthatónak kell lennie. Ha még egy mező nem is sorozható, akkor azt átmenetileg kell megjelölni.

Ha valakinek ellenőriznie kell, hogy egy osztály sorosítható-e, vagy sem, akkor az egyszerű megoldás az, ha ellenőrzik, hogy az osztály végrehajtja-e a java.io.Serializable módszert, ha igen, akkor sorosítható, ha nem, akkor nem.

Figyelembe kell venni, hogy amikor egy objektumot egy fájlba sorba rendeznek, a szokásos gyakorlat az, hogy a fájl .ser kiterjesztést adja meg.

A sorosítási módszer Java-ban

Ha ezek a módszerek jelen vannak az osztályban, akkor azokat a Java alkalmazásban történő sorosításra használják.

Eljárás Leírás
nyilvános végleges érvénytelen writeObject (objektum obj) az IOException programot dobja ()Ez a megadott objektumot írja az ObjectOutputStream fájlba.
public void flush () dob az IOException-t ()Ez ellopja az aktuális kimeneti áramot.
public void close () dobja az IOException-t ()Ez bezárja az aktuális kimeneti adatfolyamot.

Deserializációs módszer Java-ban

Eljárás Leírás
nyilvános végső Object readObject () dob IOException, ClassNotFoundException ()Ez beolvassa az objektumot a bemeneti adatfolyamból.
public void close () dobja az IOException-t ()Ez bezárja az ObjectInputStream elemet.

Példák a Java szerializálására

Ebben a szakaszban példákkal tárgyalta a Java szerializációját.

Itt található egy példa a Java-ban, amely bemutatja, hogy a sorosítás hogyan működik a Java-ban. Létrehozunk Munkavállalói osztályt néhány szolgáltatás tanulmányozására, és ennek kódját az alábbiakban találjuk. Ez a munkavállalói osztály a Szerializálható felületet valósítja meg.

public class Employee implements java.io.Serializable (
public String name;
public String address;
public transient int SSN;
public int number;
public void mailCheck() (
System.out.println("Mailing a letter to " + name + " " + address);
)
)

Amikor ezt a programot végrehajtják a végrehajtással, létrejön egy töötaja.ser nevű fájl. Ez a program nem garantált eredményt nyújt, inkább csak magyarázó célokat szolgál, célja a használat és működés megértése.

import java.io.*;
public class SerializeDemo (
public static void main(String () args) (
Employee e = new Employee();
e.name = "Rahul Jain";
e.address = "epip, Bangalore";
e.SSN = 114433;
e.number = 131;
try (
FileOutputStream fileOut =
new FileOutputStream("/tmp/employee.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(e);
out.close();
fileOut.close();
System.out.printf("Serialized data saved in /tmp/employee.ser");
) catch (IOException i) (
i.printStackTrace();
)
)
)

Az alábbiakban ismertetett DeserializeDemo program méltányossá teszi a Serialize Demo programban létrehozott fenti Munkavállalói objektumot .

import java.io.*;
public class DeserializeDemo (
public static void main(String () args) (
Employee e = null;
try (
FileInputStream fileIn = new FileInputStream("/tmp/employee.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
e = (Employee) in.readObject();
in.close();
fileIn.close();
) catch (IOException i) (
i.printStackTrace();
return;
) catch (ClassNotFoundException c) (
System.out.println("Employee class is not found");
c.printStackTrace();
return;
)
System.out.println("Deserialized Employee…");
System.out.println("Name: " + e.name);
System.out.println("Address: " + e.address);
System.out.println("SSN: " + e.SSN);
System.out.println("Number: " + e.number);
)
)

A fenti kód a következő eredményt fogja eredményezni -

Kimenet

Deszerializált alkalmazott…

Név: Rahul Jain

Cím: epip, Bangalore

SSN: 0

Száma: 131

Az alábbiakban bemutatjuk a fenti programmal kapcsolatos néhány fontos pontot -

  • A fenti try / catch blokk megpróbálja elkapni a ClassNotFoundException-t. Ezt a readObject () módszer deklarálja.
  • A JVM csak akkor értékelheti meg az objektumot, ha megtalálja az osztály byte kódját.
  • Ha a JVM nem talál osztályt az érdeklődés során, akkor a ClassNotFoundException programot dobja.
  • A readObject () visszatérési értékét mindig egy Munkavállalói referencia alapján kell megadni.
  • Az SSN mező értéke kezdetben 114433 volt, amikor az objektum sorosodott, de mivel ezt az értéket nem küldték el a kimeneti adatfolyamnak. Ugyanezen okból kifizetődőként alkalmazott Employee SSN mezőobjektum 0.

Következtetés

A fentiekben bemutattuk a sorosítási koncepciókat és példákat mutattunk be. Megértjük a sorosítás szükségességét befejező megjegyzésünkként.

  • Kommunikáció: Ha két, ugyanazt a kódot futtató gépnek kommunikálnia kell az egyszerű megoldással, akkor az egyik gépnek fel kell építenie egy objektumot, amely információkat továbbít, majd sorba kell állítania azt, mielőtt elküldi a másik gépnek. Nem nagyszerű módszer, de elvégzi a munkát.
  • Perzisztencia: Ha a működési állapotot adatbázisban kell tárolni, először egy byte-tömbre sorosítják, majd az adatbázisban tárolják, hogy későbbi időpontban lekérdezzék.
  • Mélymásolás : Ha egy objektum pontos javítását kell létrehozni, és a speciális klónosztály írása túl sok munka, akkor az objektum csak az objektum sorosítása, majd egy másik objektumra való szétosztása révén érheti el a célt.
  • Kereszt JVM szinkronizálás: A különböző gépeken és architektúrákon futó különböző JVM szinkronizálható.

Ajánlott cikkek

Ez útmutatóként szolgál a Java szerializálásához. Itt példákkal tárgyaltuk a Java szerializációjának különféle módszereit. A következő cikkben további információkat is megnézhet -

  1. Java fejlesztői interjúkérdések
  2. Java lista vs tömblista
  3. A JavaScript felhasználása

Kategória: