Serializácia v Jave

Serializácia v Jave je mechanizmus, ktorý prevádza stav objektu na bajtový tok. Deserializácia je jej spätný proces. Prostredníctvom deserializácie sa z bajtového toku v pamäti vytvorí skutočný objekt Java. Taký mechanizmus pretrváva v objekte.

Takto vytvorený tok bytov zo serializácie nezávisí od žiadnej platformy. Objekt serializovaný na jednej platforme môže byť deserializovaný na akejkoľvek inej platforme bez akýchkoľvek problémov. Celý proces serializácie a deserializácie je teda nezávislý od JVM.

Ak má byť objekt triedy serializovaný, je potrebné implementovať rozhranie java.io.Serializable. Serializable in java je rozhranie markerov. Nemá žiadne polia ani metódy na implementáciu. Trieda sa stáva serializovateľnou týmto procesom, ktorý vyzerá ako proces opt-in.

Serializáciu v jazyku Java implementujú dve triedy ObjectInputStream a ObjectOutputStream.

Všetko, čo sa vyžaduje, je nad nimi obal, aby sa dal uložiť do súboru alebo poslať cez sieť.

Koncept serializácie v Jave

Trieda ObjectOutputStream, ktorá je sériovou triedou, ako je uvedená v predchádzajúcej časti, obsahuje niekoľko metód zápisu na písanie rôznych typov údajov, ale jedna metóda je najobľúbenejšia.

public final void writeObject(Object x) throws IOException

Vyššie uvedená metóda sa môže použiť na serializáciu objektu. Táto metóda ju tiež pošle do výstupného toku. Rovnakým spôsobom trieda ObjectInputStream obsahuje metódu deserializácie objektov

public final Object readObject() throws IOException, ClassNotFoundException

Metóda deserializácie načíta objekt z prúdu a deserializuje ho. Návratová hodnota je opäť objektom, takže všetko, čo je potrebné, je preniesť na príslušný typ údajov.

Aby mohla byť trieda úspešne serializovaná, musia byť splnené dve podmienky -

  • io. Serializovateľné rozhranie musí byť implementované triedou.
  • Všetky polia triedy musia byť serializovateľné. Ak ani jedno pole nie je možné serializovať, malo by sa to označiť ako prechodné.

Ak niekto potrebuje skontrolovať, či je trieda serializovateľná alebo nie, jednoduchým riešením je skontrolovať, či trieda implementuje metódu java.io.Serializable, ak áno, je serializovateľná, ak nie, nie je.

Jeden by si mal všimnúť, že pri sériovaní objektu do súboru je štandardnou praxou dať súboru príponu .ser.

Metóda serializácie v Jave

Ak sú tieto metódy prítomné v triede, používajú sa na serializáciu na účely Java.

metóda popis
verejné konečné void writeObject (Object obj) vyvolá IOException ()Týmto sa zadaný objekt zapíše do ObjectOutputStream.
verejné vyprázdnenie () vyvolá IOException ()Tým sa prepláchne aktuálny výstupný tok.
public void close () vyvolá IOException ()Týmto sa uzavrie aktuálny výstupný tok.

Metóda deserializácie v Jave

metóda popis
verejné konečné Objekt readObject () vyvolá IOException, ClassNotFoundException ()Týmto sa načíta objekt zo vstupného toku.
public void close () vyvolá IOException ()Týmto sa uzavrie ObjectInputStream.

Príklady serializácie v Jave

V tejto časti sme diskutovali o Serializácii v Jave s príkladmi.

Tu je uvedený príklad v jazyku Java, ktorý demonštruje, ako funguje serializácia v jazyku Java. Vytvoríme triedu Zamestnanci, ktorá študuje niektoré funkcie a jej kód je uvedený nižšie. Táto trieda zamestnancov implementuje rozhranie 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);
)
)

Keď sa tento program vykoná po vykonaní, vytvorí sa súbor s názvom zamestnanec.server. Tento program neposkytuje zaručený výstup, ale slúži iba na vysvetlenie a jeho cieľom je porozumieť jeho použitiu a fungovaniu.

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

Nižšie opísaný program DeserializeDemo deserializuje vyššie uvedený zamestnanecký objekt vytvorený v programe 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);
)
)

Vyššie uvedený kód prinesie nasledujúci výsledok -

Výkon

Deserializovaný zamestnanec…

Meno: Rahul Jain

Adresa: epip, Bangalore

SSN: 0

Číslo: 131

Niektoré dôležité body týkajúce sa vyššie uvedeného programu sú uvedené nižšie -

  • Blok try / catch vyššie sa pokúša zachytiť výnimku ClassNotFoundException. Toto je deklarované metódou readObject ().
  • JVM môže deserializovať objekt, iba ak nájde bajtkód pre triedu.
  • Ak JVM nenájde triedu počas deserializácie, vyvolá ClassNotFoundException.
  • návratová hodnota readObject () je vždy prenášaná na referenciu zamestnanca.
  • Hodnota poľa SSN bola spočiatku 114433, keď bol objekt serializovaný, ale keďže táto hodnota nebola odoslaná do výstupného toku. Z tohto dôvodu je objekt poľa SSN deserializovaného zamestnanca 0.

záver

Vyššie sme predstavili koncepty serializácie a poskytli príklady. Pochopme potrebu serializácie ako naše záverečné poznámky.

  • Komunikácia: Ak dva počítače, ktoré používajú rovnaký kód, musia komunikovať jednoduchým spôsobom, je to, že jeden stroj by mal zostaviť objekt obsahujúci informácie, ktoré by vysielal, a potom ho pred odoslaním na druhý stroj serializovať. Nie je to skvelá metóda, ale práca sa dokončí.
  • Perzistencia: Ak sa má operačný stav uložiť do databázy, najprv sa serializuje do bajtového poľa a potom sa uloží do databázy, aby sa získal neskôr.
  • Hlboká kópia: Ak je potrebné vytvoriť presnú repliku objektu a písanie špecializovanej triedy klonovania je príliš náročná práca, potom iba serializáciou objektu a následným de-serializáciou na iný objekt sa dosiahne cieľ.
  • Cross JVM Synchronization: rôzne JVM bežiace na rôznych strojoch a architektúrach môžu byť synchronizované.

Odporúčané články

Toto bol sprievodca Serializáciou v Jave. Tu sme diskutovali o rôznych metódach serializácie v Jave s príkladmi. Viac informácií nájdete aj v nasledujúcom článku -

  1. Otázky týkajúce sa rozhovoru pre vývojárov Java
  2. Zoznam Java a zoznam polí
  3. Použitie JavaScriptu

Kategórie: