Sarjakuva Java

Sarjakuvaus Java-järjestelmässä on mekanismi, joka muuntaa objektin tilan tavuvirraksi. Deserialisointi on sen käänteinen prosessi. Ansaitsemismuodon kautta, tavuvirta, todellinen Java-objekti luodaan muistiin. Tällainen mekanismi pysyy kohteena.

Siten sarjamuodostuksesta luotu tavuvirta ei ole riippuvainen mistään alustasta. Yhdellä alustalla sarjoitettu esine voidaan ansaita toiselle alustalle ilman mitään ongelmia. Siten koko sarjoittamis- ja ansiointiprosessi on JVM-riippumaton.

Jos luokkaobjekti on tarkoitus sarjata, sinun on otettava käyttöön java.io.Serializable-käyttöliittymä. Sarjakuvaus javaan on merkkirajapinta. Sillä ei ole kenttiä tai menetelmiä toteutettavaksi. Luokka tehdään sarjoitettaviksi tällä prosessilla, joka näyttää opt-in-prosessilta.

Kaksi luokkaa ObjectInputStream ja ObjectOutputStream toteuttavat Java-sarjojen sarjanumeroinnin.

Tarvitaan vain kääre niiden päälle, jotta se voidaan tallentaa tiedostoon tai lähettää verkon kautta.

Serialisoinnin käsite Java-järjestelmässä

Luokka ObjectOutputStream, joka on sarjoitusluokka, kuten yllä mainitaan, sisältää useita kirjoitusmenetelmiä erilaisten tietotyyppien kirjoittamiseksi, mutta yksi menetelmä on suosituin

public final void writeObject(Object x) throws IOException

Edellä mainittua menetelmää voidaan käyttää objektin sarjoittamiseen. Tämä menetelmä lähettää sen myös lähtövirtaan. Samalla tavalla ObjectInputStream-luokka sisältää menetelmän objektin ansaitsemiseksi

public final Object readObject() throws IOException, ClassNotFoundException

Ansaitsemismenetelmä hakee esineen streamista ja ansaitsee sen saman. Palautusarvo on jälleen objekti, joten kaikki mitä tarvitaan, on heittää se asianmukaiseen tietotyyppiin.

Jotta luokka voidaan järjestää onnistuneesti, on täytettävä kaksi ehtoa -

  • io. Sarjan on toteutettava sarjakytkettävä käyttöliittymä.
  • Kaikkien luokan kenttien on oltava sarjoitettavia. Jos edes yhtä kenttää ei voida sarjoittaa, se on merkittävä lyhytaikaiseksi.

Jos jonkun on tarkistettava, onko luokka sarjoitettavaa vai ei, yksinkertainen ratkaisu on tarkistaa, toteuttaako luokka java.io.Serializable-menetelmän, jos se toimii, niin se on sarjoitettavissa, jos ei, niin se ei ole.

Huomattakoon, että objektia sarjattaessa tiedostoon, tavanomainen käytäntö on antaa tiedostolle .ser-laajennus.

Sarjallistamismenetelmä Java-ohjelmassa

Jos näitä menetelmiä on luokassa, niitä käytetään sarjoittamiseen Java-tarkoituksiin.

Menetelmä Kuvaus
public final void writeObject (Object obj) heittää IOException ()Tämä kirjoittaa määritetyn objektin ObjectOutputStream-tiedostoon.
public void flush () heittää IOException ()Tämä huuhtelee nykyisen lähtövirran.
public void close () heittää IOException ()Tämä sulkee nykyisen lähtövirran.

Deserialisointimenetelmä Java: lla

Menetelmä Kuvaus
julkinen lopullinen Object readObject () heittää IOException, ClassNotFoundException ()Tämä lukee objektin syöttövirrasta.
public void close () heittää IOException ()Tämä sulkee ObjectInputStream.

Esimerkkejä Serialization Java

Tässä osassa olemme keskustelleet sarjoittamisesta Java-ohjelmassa esimerkkien avulla.

Tässä on Java-esimerkki, joka osoittaa, kuinka sarjanumerointi toimii Java-ohjelmassa. Luomme työntekijäluokan tutkimaan joitain ominaisuuksia, ja niiden koodi annetaan alla. Tämä työntekijäluokka toteuttaa Serializable-käyttöliittymän.

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

Kun tämä ohjelma suoritetaan suorittamalla, luodaan tiedosto nimeltä työntekijä.ser. Tämä ohjelma ei tarjoa taattua tulosta, vaan se on vain selittävää tarkoitusta varten ja tavoitteena on ymmärtää sen käyttö ja toiminta.

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

Alla kuvattu DeserializeDemo-ohjelma ansaitsee yllä olevan Serialize Demo-ohjelmassa luodun työntekijäobjektin .

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

Yllä oleva koodi tuottaa seuraavan tuloksen -

ulostulo

Deserialized työntekijä…

Nimi: Rahul Jain

Osoite: epip, Bangalore

SSN: 0

Numero: 131

Alla on joitain tärkeitä yllä mainittuun ohjelmaan liittyviä seikkoja -

  • Yllä oleva Yritä / saalis-lohko yrittää saada ClassNotFoundException. Tämä ilmoitetaan readObject () -menetelmällä.
  • JVM voi ansaita objektin tarkoituksenmukaisesti, vain jos se löytää luokan tavukoodin.
  • Jos JVM ei löydä luokkaa ansioitumisen aikana, se heittää ClassNotFoundException.
  • readObject (): n palautusarvo lasketaan aina työntekijäviitteeseen.
  • SSN-kentän arvo oli alun perin, kun objekti sarjattiin, mutta koska tätä arvoa ei lähetetty lähtövirtaan. Samasta syystä ansioitunut työntekijän SSN-kenttäobjekti on 0.

johtopäätös

Edellä esittelimme sarjoittamiskonseptit ja annoimme esimerkkejä. Ymmärretään sarjoittamisen tarve lopput huomautuksemme.

  • Kommunikaatio: Jos kahden koneen, joka käyttää samaa koodia, on kommunikoitava helpon matkan päässä, on, että yhden koneen tulee rakentaa esine, joka sisältää tietoja, jotka se lähettää, ja sitten sarjata kyseinen esine ennen lähettämistä toiselle koneelle. Ei hieno menetelmä, mutta saa työnsä päätökseen.
  • Pysyvyys: Jos toimintatilaa on tarkoitus tallentaa tietokantaan, se sarjoitetaan ensin tavujoukkoon ja tallennetaan sitten tietokantaan hakemista varten myöhempänä ajankohtana.
  • Syväkopiointi : Jos objektin tarkka kopio on luotava ja erikoistuneen klooniluokan kirjoittaminen on liian paljon kovaa työtä, päästään tavoitteeseen vain järjestämällä objekti ja jakamalla se sitten sarjalle toiselle objektille.
  • Cross JVM -synkronointi: Eri koneilla ja arkkitehtuureilla toimivat erilaiset JVM: t voidaan synkronoida.

Suositellut artikkelit

Tämä on opas Serialization Java-sovelluksesta. Tässä olemme keskustelleet Java-sarjoittamisen erilaisista menetelmistä esimerkkien avulla. Voit myös tarkastella seuraavaa artikkelia saadaksesi lisätietoja -

  1. Java-kehittäjien haastattelua koskevat kysymykset
  2. Java-luettelo vs. taulukkoluettelo
  3. JavaScriptin käyttö