Serijalizacija u Javi

Serijalizacija u Javi mehanizam je koji pretvara stanje objekta u bajt stream. Deserializacija je njezin obrnuti proces. Kroz deserizaciju, iz bajt stream, stvarni Java objekt stvara se u memoriji. Takav mehanizam ustraje na objektu.

Tako napravljen byte od serializacije ne ovisi o bilo kojoj platformi. Objekt serializiran na jednoj platformi može se deserializirati na bilo kojoj drugoj platformi bez ikakvog problema. Stoga je cjelokupni proces serializacije i deserializacije neovisan o JVM-u.

Ako se predmet klase želi serializirati, tada treba implementirati java.io.Serializable sučelje. Serializable u javi je sučelje markera. Nema polja ili metoda za implementaciju. Klasa se serijski prepoznaje ovim postupkom koji izgleda kao Opt-In proces.

Serijalizacija u Javi provodi dvije klase ObjectInputStream i ObjectOutputStream.

Sve što je potrebno je omotač nad njima, tako da se može spremiti u datoteku ili poslati mrežom.

Koncept serializacije u Javi

Klasa ObjectOutputStream koja je klasa serializacije kao što je spomenuto u gornjem odjeljku sadrži nekoliko metoda pisanja za pisanje različitih vrsta podataka, ali jedna je metoda najpopularnija

public final void writeObject(Object x) throws IOException

Gornja metoda može se koristiti za serializaciju objekta. Ova metoda ga također šalje u izlazni tok. Na isti način, klasa ObjectInputStream sadrži metodu za deserijalizaciju objekata

public final Object readObject() throws IOException, ClassNotFoundException

Metoda deserializacije dohvaća objekt iz struje i deserializira isti. Povratna vrijednost je ponovo objekt, pa sve što je potrebno jest prebaciti ga na odgovarajući tip podataka.

Da bi se klasa uspješno serializirala, moraju biti ispunjena dva uvjeta -

  • IO. Serijalizabilno sučelje mora implementirati klasa.
  • Sva polja klase moraju biti serializabilna. Ako ni jedno polje nije moguće serializirati, tada ga treba označiti prolaznim.

Ako netko treba provjeriti je li klasa serializabilna ili ne, jednostavno rješenje je provjeriti primjenjuje li klasa java.io.Serializable metodu, ako postoji, onda je serializabilna ako nije, onda nije.

Treba primijetiti da prilikom serializacije objekta u datoteku standardna praksa daje datoteci ekstenziju .ser.

Način serializacije u Javi

Ako su ove metode prisutne u razredu, one se koriste za serializaciju u Jave svrhe.

način Opis
javna konačna void writeObject (Objekt obj) baca IOException ()Ovo će upisati navedeni objekt u ObjectOutputStream.
javna void flush () baca IOException ()To će isprati trenutni izlazni tok.
javna void close () baca IOException ()Ovo će zatvoriti trenutni izlazni tok.

Metoda deserializacije u Javi

način Opis
javni završni objekt readObject () baca IOException, ClassNotFoundException ()Ovo će pročitati objekt iz ulaznog toka.
javna void close () baca IOException ()Ovo će zatvoriti ObjectInputStream.

Primjeri serializacije u Javi

U ovom smo dijelu s primjerima razgovarali o serializaciji u Javi.

Ovdje se nalazi primjer u Javi kako bi se pokazalo kako serializacija funkcionira u Javi. Stvaramo klasu zaposlenika da bismo proučavali neke značajke, a kod za istu nalazi se u nastavku. Ova klasa zaposlenika implementira serijski prilagodljivo sučelje.

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

Kada se ovaj program izvodi s izvršavanjem, stvorila bi se datoteka pod nazivom zaposlenik.ser. Ovaj program ne osigurava zajamčeni ishod, već je u svrhu objašnjenja i cilj je razumjeti njegovu uporabu i rad.

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

Dolje opisani program DeserializeDemo deserializira gore navedeni objekt Employee stvoren u 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);
)
)

Gornji kod će proizvesti sljedeći rezultat -

Izlaz

Deserializirani zaposleni…

Ime: Rahul Jain

Adresa: epip, Bangalore

SSN: 0

Broj: 131

Neke važne točke povezane s gornjim programom nalaze se u nastavku -

  • Gore pokušani / uhvatni blok pokušava uhvatiti ClassNotFoundException. To se deklarira metodom readObject ().
  • JVM može deserializirati objekt, samo ako pronađe bajt kod za klasu.
  • Ako JVM ne nađe klasu tijekom deserializacije, izbacit će ClassNotFoundException.
  • povratna vrijednost readObject () uvijek se navodi na referencu Employee.
  • Vrijednost SSN polja bila je u početku 114433 kada je objekt serializiran, ali kako ta vrijednost nije poslana u izlazni tok. Zbog istog, deserijalizirani objekt SSN polja zaposlenika je 0.

Zaključak

Iznad smo uveli koncepte serializacije i dali primjere. Shvatimo potrebu za serializacijom kao naše zaključne primjedbe.

  • Komunikacija: Ako dva stroja koja imaju isti kod trebaju komunicirati na jednostavan način, jedan stroj treba sagraditi objekt koji sadrži informacije koje će prenijeti, a zatim serializirati taj objekt prije nego što ga pošalje na drugi stroj. Nije sjajna metoda, ali posao dovršava.
  • Postojanost: Ako se stanje rada želi pohraniti u bazu podataka, prvo se serializira u bajt niz, a zatim se pohranjuje u bazu podataka radi ponovnog pretraživanja.
  • Duboka kopija: Ako je potrebno stvoriti preciznu kopiju objekta i pisanje specijaliziranih klana klona je previše naporan posao, onda će serializacijom objekta i zatim deserializacijom u drugi objekt postići cilj.
  • Cross JVM sinkronizacija: različiti JVM-ovi koji se pokreću na različitim strojevima i arhitekturama mogu se sinkronizirati.

Preporučeni članci

Ovo je vodič za serializaciju na Javi. Ovdje smo s primjerima razgovarali o različitim metodama serializacije u Javi. Možete pogledati i sljedeći članak da biste saznali više -

  1. Pitanja o intervjuu za razvojne programere Java
  2. Java List vs Array List
  3. Upotrebe JavaScripta

Kategorija: