Järjestus Java-s

Järjestus Java-s on mehhanism, mis teisendab objekti oleku baitivoogu. Deserialiseerimine on selle vastupidine protsess. Põhiülekande kaudu luuakse mällu tegelik Java-objekt baitivoo kaudu. Selline mehhanism püsib objekti.

Seerialiseerimise teel loodud baitivoog ei sõltu ühestki platvormist. Ühel platvormil seeria objekt saab ilma probleemideta realiseerida igal teisel platvormil. Seega on kogu serialiseerimise ja selle väärtuse muutmise protsess JVM-is sõltumatu.

Klassiobjekti seerialiseerimiseks tuleb installida liides java.io.Serializable. Javas seerialiseeritav on markerliides. Sellel puuduvad väljad ega meetodid. Selle protsessi abil saab klassi seeriaviisiliselt muuta, mis näeb välja nagu opt-in-protsess.

Järjestamist Java-s rakendavad kaks klassi ObjectInputStream ja ObjectOutputStream.

Vaja on ainult ümbrist, et neid saaks faili salvestada või võrgu kaudu saata.

Serialiseerimise mõiste Java-s

Klass ObjectOutputStream, mis on ülalolev klass, nagu ülalpool mainitud, sisaldab mitmeid kirjutamismeetodeid erinevate andmetüüpide kirjutamiseks, kuid üks meetod on kõige populaarsem

public final void writeObject(Object x) throws IOException

Ülaltoodud meetodit saab kasutada objekti seerialiseerimiseks. See meetod saadab selle ka väljundvoogu. Samal viisil sisaldab objekt ObjectInputStream meetodit objekti väärtustamiseks

public final Object readObject() throws IOException, ClassNotFoundException

Tähtsustamismeetod hangib objekti voost ja selle algväärtustab. Tagasiväärtus on jällegi objekt, nii et kõik, mis on vajalik, on selle ülekandmine asjakohasele andmetüübile.

Klassi edukaks järjestamiseks peavad olema täidetud kaks tingimust -

  • io. Klass peab rakendama seerialiseeritavat liidest.
  • Kõik klassi väljad peavad olema seerialiseeritavad. Kui isegi ühte välja ei saa seerialiseerida, tuleks see märkida mööduvaks.

Kui keegi peab kontrollima, kas klass on seerialiseeritav või mitte, on lihtne lahendus kontrollida, kas klass rakendab meetodit java.io.Serializable, kui see toimub, siis on see seerialiseeritav, kui ei, siis see pole nii.

Peaks tähele panema, et kui objekt seeriatesse faili pannakse, antakse tavaliselt faili .ser laiend.

Serialiseerimisviis Java-s

Kui need meetodid on klassis olemas, kasutatakse neid Java jaoks serialiseerimiseks.

Meetod Kirjeldus
avalik lõplik tühine writeObject (objekt obj) viskab IOExceptioni ()See kirjutab määratud objekti objektile ObjectOutputStream.
public void flush () viskab IOExceptioni ()See loputab praeguse väljundvoo.
public void close () viskab IOExceptioni ()See sulgeb praeguse väljundvoo.

Deserialiseerimise meetod Java-s

Meetod Kirjeldus
avalik lõpp Objekt readObject () viskab välja IOException, ClassNotFoundException ()See loeb objekti sisendvoogudest.
public void close () viskab IOExceptioni ()See sulgeb ObjectInputStreami.

Serialiseerimise näited Java-s

Selles jaotises oleme arutanud näidete abil Java sarjastamist.

Siin on toodud näide Java-vormingus, et näidata, kuidas Java-sarjastamine töötab. Loome mõne funktsiooni uurimiseks töötajate klassi ja nende kood on toodud allpool. See töötajaklass rakendab serialiseeritavat liidest.

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

Kui see programm täidetakse, luuakse fail töötaja nimega server. See programm ei taga garanteeritud väljundit, vaid on mõeldud ainult selgitamiseks ja eesmärk on mõista selle kasutamist ja toimimist.

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

Allpool kirjeldatud programm DeserializeDemo väärib eelnimetatud Serialize Demo programmis loodud töötajate objekti .

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

Ülaltoodud kood annab järgmise tulemuse -

Väljund

Deserialiseeritud töötaja…

Nimi: Rahul Jain

Aadress: epip, Bangalore

SSN: 0

Arv: 131

Allpool on toodud mõned ülaltoodud programmiga seotud olulised punktid -

  • Ülaltoodud proovimis- / blokeerimisplokk püüab saada ClassNotFoundExceptioni. Seda deklareeritakse readObject () meetodil.
  • JVM võib objekti objektiivseks muuta, ainult siis, kui see leiab klassi baidikoodi.
  • Kui JVM ei leia klassi tasustamise ajal klassi, viskab ta klassiNotFoundException.
  • readObject () tagastatav väärtus suunatakse alati töötaja viitele.
  • Objekti seerialiseerimisel oli SSN välja väärtus 114433 algselt, kuid kuna seda väärtust väljundvoogu ei saadetud. Sama põhjusel on väljateenitud töötajate SSN-välja objekt 0.

Järeldus

Ülalpool tutvustasime serialiseerimise kontseptsioone ja tõime näiteid. Mõistame serialiseerimise vajadust meie lõplike märkustena.

  • Kommunikatsioon: kui kaks sama koodiga masinat vajavad lihtsat väljapääsu, peavad üks masinad ehitama objekti, mis sisaldab teavet, mida see edastaks, ja seejärel selle objekti enne teisele masinale saatmist seerialiseerima. Pole suurepärane meetod, kuid saab töö tehtud.
  • Püsivus: kui operatsiooni olekut tuleb andmebaasis salvestada, seeriseeritakse see kõigepealt baitmassiiviks ja salvestatakse seejärel andmebaasis hiljem leidmiseks.
  • Sügav koopia: kui on vaja luua objekti täpne parandus ja spetsiaalse klooniklassi kirjutamine on liiga suur töö, siis saavutab selle eesmärgi vaid objekt seerialiseerides ja seejärel jaotades selle teisele objektile.
  • Rist-JVM-i sünkroonimine: erinevaid JVM- e, mis töötavad erinevatel masinatel ja arhitektuuridel, saab sünkroonida.

Soovitatavad artiklid

See on olnud Java jadaversioonide juhend. Siin oleme näidetega käsitlenud Java sarjastamise erinevaid meetodeid. Lisateabe saamiseks võite vaadata ka järgmist artiklit -

  1. Java arendaja intervjuu küsimused
  2. Java loend vs massiivide loend
  3. JavaScripti kasutusviisid

Kategooria: