Serialisering i Java

Serialisering i Java er en mekanisme som konverterer objektets tilstand til en bytestrøm. Deserialisering er den omvendte prosessen. Gjennom deserialisering, fra en byte-strøm, opprettes det faktiske Java-objektet i minnet. En slik mekanisme vedvarer objektet.

Bytestrømmen som er opprettet fra serialisering avhenger ikke av noen plattform. Objektet som er serialisert på en plattform kan deserialiseres på hvilken som helst annen plattform uten problemer. Dermed er hele prosessen med serialisering og deserialisering JVM uavhengig.

Hvis et klasseobjekt skal serialiseres, må man implementere java.io.Serializable-grensesnittet. Serialiserbar i java er et markørgrensesnitt. Det har ingen felt eller metoder å implementere. En klasse gjøres seriebar ved denne prosessen som ser ut som en Opt-In-prosess.

Serialisering i Java implementeres av de to klassene ObjectInputStream og ObjectOutputStream.

Alt som kreves er en innpakning over dem slik at den kan lagres til fil eller kan sendes over et nettverk.

Konseptet Serialisering i Java

Klassen ObjectOutputStream som er serialiseringsklasse som nevnt ovenfor, inneholder flere skrivemetoder for å skrive forskjellige datatyper, men en metode er mest populær

public final void writeObject(Object x) throws IOException

Ovennevnte metode kan brukes til å serialisere et objekt. Denne metoden sender den også til utstrømmen. På samme måte inneholder ObjectInputStream-klassen metoden for å deserialisere objekter

public final Object readObject() throws IOException, ClassNotFoundException

Deserialiseringsmetoden henter objektet fra en strøm og deserialiserer det samme. Returverdien er igjen et objekt, så alt som trengs er å kaste den til relevant datatype.

For at en klasse skal kunne serialiseres, er det to betingelser som må oppfylles -

  • io. Serialiserbart grensesnitt må implementeres av klassen.
  • Alle felt i klassen må være serialiserbare. Hvis til og med ett felt ikke kan serialiseres, bør det merkes forbigående.

Hvis noen trenger å sjekke om en klasse kan serialiseres eller ikke, er den enkle løsningen å sjekke om klassen implementerer java.io.Serialiserbar metode, hvis den gjør det, kan den serialiseres hvis den ikke, så er den ikke.

Man må legge merke til at når man serialiserer et objekt til en fil, er standardpraksisen å gi filen en .ser-utvidelse.

Metode for serialisering i Java

Hvis disse metodene er til stede i klassen, brukes de til serialisering i Java-formål.

Metode Beskrivelse
public final void writeObject (Object obj) kaster IOException ()Dette vil skrive det spesifiserte objektet til ObjectOutputStream.
public void flush () kaster IOException ()Dette vil spyle den gjeldende utgangsstrømmen.
public void close () kaster IOException ()Dette vil lukke den nåværende utgangsstrømmen.

Metode for deserialisering i Java

Metode Beskrivelse
public final Objekt readObject () kaster IOException, ClassNotFoundException ()Dette vil lese et objekt fra inndatastrømmen.
public void close () kaster IOException ()Dette vil lukke ObjectInputStream.

Eksempler på serialisering i Java

I denne delen har vi diskutert Serialisering i Java med eksempler.

Et eksempel i Java er gitt her for å demonstrere hvordan serialisering fungerer i Java. Vi oppretter en ansattklasse for å studere noen funksjoner, og koden for den er gitt nedenfor. Denne ansattklassen implementerer Serialiserbart grensesnitt.

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

Når dette programmet blir utført med utføring, vil det bli opprettet en fil som heter worker.ser. Dette programmet gir ikke en garantert utgang, snarere bare for forklarende formål, og målet er å forstå bruken og arbeidet.

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

Nedenfor beskrev DeserializeDemo-programmet deserialiserer ovennevnte Ansatt-objekt som er opprettet i Serialize Demo-programmet .

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

Koden ovenfor vil gi følgende resultat -

Produksjon

Deserialisert ansatt …

Navn: Rahul Jain

Adresse: epip, Bangalore

SSN: 0

Nummer: 131

Noen viktige punkter relatert til programmet over er gitt nedenfor -

  • Try / catch-blokken ovenfor prøver å fange en ClassNotFoundException. Dette er erklært med readObject () -metoden.
  • En JVM kan deserialisere et objekt, bare hvis den finner bytekoden for klassen.
  • Hvis JVM ikke finner en klasse under deserialiseringen, vil den kaste ClassNotFoundException.
  • returneringsverdien til readObject () blir alltid kastet til en ansatt-referanse.
  • SSN-feltverdien var 114433 opprinnelig da objektet ble serialisert, men da denne verdien ikke ble sendt til utstrømmen. På grunn av det samme er det deserialiserte ansatte SSN-feltobjektet 0.

Konklusjon

Over introduserte vi serialiseringskonsepter og ga eksempler. La oss forstå behovet for serialisering som våre avsluttende kommentarer.

  • Kommunikasjon: Hvis to maskiner som kjører den samme koden, må kommunisere den enkle utveien, er at den ene maskinen skal bygge et objekt som inneholder informasjon som den vil overføre, og deretter serialisere objektet før du sender det til den andre maskinen. Ikke en fin metode, men får jobben gjort.
  • Persistens: Hvis drifttilstanden skal lagres i en database, blir den først serialisert til en byte-gruppe og deretter lagret i databasen for henting på et senere tidspunkt.
  • Dyp kopi: Hvis en nøyaktig replikering av et objekt må opprettes og å skrive spesialisert klonklasse er for mye hardt arbeid, vil du ved å bare serialisere objektet og deretter de-serialisere det til et annet objekt oppnå målet.
  • Krysse JVM-synkronisering: forskjellige JVM-er som kjører på forskjellige maskiner og arkitekturer, kan synkroniseres.

Anbefalte artikler

Dette har vært en guide til Serialisering i Java. Her har vi diskutert de forskjellige metodene for serialisering i Java med eksempler. Du kan også se på følgende artikkel for å lære mer -

  1. Java Developer Interview Questions
  2. Java List vs Array List
  3. Bruk av JavaScript