Serializacija v Javi

Serializacija v Javi je mehanizem, ki stanje predmeta pretvori v bajtni tok. Deserializacija je njen obratni postopek. S deserializacijo iz toka bajtov se v pomnilniku ustvari dejanski predmet Java. Tak mehanizem objekt vztraja.

Tok bajtov, ustvarjen s serializacijo, ni odvisen od nobene platforme. Predmet, serializiran na eni platformi, lahko brez kakršne koli težave deserializiramo na kateri koli drugi platformi. Tako je celoten postopek serializacije in deserializacije neodvisen od JVM.

Če je treba predmet razreda za serijo, potem je treba izvesti vmesnik java.io.Serializable. Serializable v javi je marker vmesnik. Nima polja ali metod za izvajanje. Ta postopek je mogoče serijsko prepoznati s tem postopkom, ki je videti kot postopek opt-In.

Serializacijo v Javi izvajata dva razreda ObjectInputStream in ObjectOutputStream.

Vse, kar je potrebno, je ovitek nad njimi, tako da ga je mogoče shraniti v datoteko ali poslati po omrežju.

Koncept serializacije na Javi

Razred ObjectOutputStream, ki je razred serializacije, kot je omenjeno v zgornjem razdelku, vsebuje več načinov pisanja za pisanje različnih podatkovnih vrst, vendar je ena metoda najbolj priljubljena

public final void writeObject(Object x) throws IOException

Zgornjo metodo lahko uporabimo za serializacijo predmeta. Ta metoda ga pošlje tudi v izhodni tok. Na enak način razred ObjectInputStream vsebuje metodo za deserializacijo predmetov

public final Object readObject() throws IOException, ClassNotFoundException

Metoda deserializacije pridobi predmet iz toka in deserializira isto. Vrnjena vrednost je spet objekt, zato je vse, kar je potrebno, da ga dodelite ustreznemu tipu podatkov.

Za uspešno serializacijo razreda morata biti izpolnjena dva pogoja -

  • io. Razvrstitev vmesnika mora izvajati razred.
  • Vsa polja razreda morajo biti izvedljiva. Če niti eno polje ni mogoče serijsko določiti, ga je treba označiti kot prehodno.

Če mora kdo preveriti, ali je razred serializabilen ali ne, je preprosta rešitev, da preveri, ali razred izvaja metodo java.io.Serializable, če je, potem je serializabilen, če ni, potem ni.

Opozoriti je treba, da je standardna praksa, ko serializira predmet v datoteko, datotečni priponi .ser podaljšati.

Metoda serializacije na Javi

Če so te metode prisotne v razredu, se v namene Java uporabljajo za serializacijo.

Metoda Opis
javno končno void writeObject (Objekt obj) vrže IOException ()To bo podalo navedeni objekt v ObjectOutputStream.
javna void flush () vrže IOException ()To bo splaknilo trenutni izhodni tok.
javna void close () vrže IOException ()To bo zaprlo trenutni izhodni tok.

Metoda deserializacije na Javi

Metoda Opis
javni končni Object readObject () vrže IOException, ClassNotFoundException ()To bo predmet prebral iz vhodnega toka.
javna void close () vrže IOException ()To bo zaprlo ObjectInputStream.

Primeri serializacije v Javi

V tem razdelku smo s primeri obravnavali serializacijo v Javi.

Tukaj je prikazan primer v Javi, ki prikazuje, kako serializacija deluje na Javi. Ustvarimo razred zaposlenega za preučevanje nekaterih funkcij, koda za to pa je navedena spodaj. Ta razred zaposlenih izvaja vmesnik Serializable.

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);
)
)

Ko se bo ta program končal z izvajanjem, se ustvari datoteka z imenom zaposleni.ser. Ta program ne zagotavlja zajamčenih rezultatov, temveč je zgolj za pojasnjevanje, njegov namen pa je razumeti njegovo uporabo in delovanje.

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();
)
)
)

Spodaj opisani program DeserializeDemo deserializira zgornji objekt Employee, ustvarjen v programu Serialize Demo .

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);
)
)

Zgornja koda bo dala naslednji rezultat -

Izhod

Deserializirani zaposleni…

Ime: Rahul Jain

Naslov: epip, Bangalore

SSN: 0

Številka: 131

Spodaj je navedenih nekaj pomembnih točk, povezanih s programom -

  • Zgoraj poskusni / ujeti blok poskuša ujeti ClassNotFoundException. To izjavi z metodo readObject ().
  • JVM lahko objekt deserializira, le če najde bajt kodo za razred.
  • Če JVM med deserializacijo ne najde razreda, bo vrgel ClassNotFoundException.
  • povratna vrednost readObject () je vedno podana na referenco zaposlenega.
  • Vrednost polja SSN je bila prvotno 114433, ko je bil objekt serijsko izveden, vendar ker ta vrednost ni bila poslana v izhodni tok. Zaradi istega je deserializiran objekt polja SSN zaposlenega 0.

Zaključek

Zgoraj smo predstavili koncepte serializacije in navedli primere. Razumejmo potrebo po serializaciji kot naše sklepne pripombe.

  • Komunikacija: Če morata dva stroja, ki uporabljata isto kodo, sporočati enostaven način, je, da mora en stroj sestaviti predmet, ki vsebuje informacije, ki bi jih prenašal, in nato serijski postopek pred pošiljanjem na drugi stroj. Ni odlična metoda, vendar delo opravi.
  • Obstojnost: Če želite, da se stanje delovanja shrani v bazo podatkov, se najprej serializira v bajtovski niz in nato pozneje shrani v bazo podatkov za iskanje.
  • Globoka kopija: Če je treba ustvariti natančno kopijo predmeta in pisati specializirani razred klonov, je preveč napornega dela, potem s samo serializacijo predmeta in nato deserializacijo na drug objekt dosežemo cilj.
  • Navzkrižna sinhronizacija JVM: različne JVM-ove, ki delujejo na različnih strojih in arhitekturah, je mogoče sinhronizirati.

Priporočeni članki

To je vodnik za serializacijo na Javi. Tu smo s primeri obravnavali različne načine serializacije v Javi. Če želite izvedeti več, si oglejte tudi naslednji članek -

  1. Vprašanja o intervjuju za razvijalce Java
  2. Seznam Java proti seznamu matic
  3. Uporaba JavaScript