Serialisering i Java

Serialisering i Java er en mekanisme, der konverterer et objekts tilstand til en byte-strøm. Deserialisering er dens omvendte proces. Gennem deserialisering, fra en byte-strøm, oprettes et faktisk Java-objekt i hukommelsen. En sådan mekanisme vedvarer objektet.

Byte-strømmen, der er oprettet ved hjælp af serialisering, afhænger ikke af nogen platform. Objektet, der er serialiseret på en platform, kan deserialiseres på enhver anden platform uden problemer. Således er hele processen med serialisering og deserialisering JVM-uafhængig.

Hvis et klasseobjekt skal serialiseres, skal man implementere java.io.Serializable-interface. Serialiserbar i java er en markørgrænseflade. Det har ingen felter eller metoder til at implementere. En klasse gøres serialiserbar ved denne proces, der ligner en Opt-In-proces.

Serialisering i Java implementeres af de to klasser ObjectInputStream og ObjectOutputStream.

Alt, hvad der kræves, er en indpakning over dem, så den kan gemmes til fil eller kan sendes over et netværk.

Begrebet serialisering i Java

Klassen ObjectOutputStream, som er serialiseringsklasse som nævnt i ovenstående afsnit, indeholder flere skrivemetoder til skrivning af forskellige datatyper, men en metode er mest populær

public final void writeObject(Object x) throws IOException

Ovenstående metode kan bruges til at serialisere et objekt. Denne metode sender den også til outputstrømmen. På samme måde indeholder klassen ObjectInputStream metoden til deserialisering af objekt

public final Object readObject() throws IOException, ClassNotFoundException

Deserialiseringsmetoden henter objektet fra en strøm og deserialiserer det samme. Returværdien er igen et objekt, så alt hvad der er nødvendigt er at kaste den til relevant datatype.

For at en klasse skal kunne serialiseres, er der to betingelser, der skal være opfyldt -

  • io. Serialiserbar grænseflade skal implementeres af klassen.
  • Alle felter i klassen skal kunne serialiseres. Hvis selv et felt ikke kan serialiseres, skal det markeres kortvarigt.

Hvis nogen har brug for at kontrollere, om en klasse kan serialiseres eller ej, er den enkle løsning at kontrollere, om klassen implementerer java.io.Serialiserbar metode, hvis den gør det, kan den serialiseres, hvis den ikke er den ikke.

Man skal bemærke, at når man serualiserer et objekt til en fil, er den almindelige praksis at give filen en .ser-udvidelse.

Metode til serialisering i Java

Hvis disse metoder findes i klassen, bruges de til serialisering i Java-formål.

Metode Beskrivelse
public final void writeObject (Object obj) kaster IOException ()Dette vil skrive det specificerede objekt til ObjectOutputStream.
public void flush () kaster IOException ()Dette skyller den aktuelle outputstrøm.
public void close () kaster IOException ()Dette lukker den aktuelle outputstrøm.

Metode til deserialisering i Java

Metode Beskrivelse
public final Object readObject () kaster IOException, ClassNotFoundException ()Dette vil læse et objekt fra inputstrømmen.
public void close () kaster IOException ()Dette lukker ObjectInputStream.

Eksempler på serialisering i Java

I dette afsnit har vi diskuteret Serialisering i Java med eksempler.

Et eksempel i Java findes her for at demonstrere, hvordan serialisering fungerer i Java. Vi opretter en medarbejderklasse til at studere nogle funktioner, og koden til den samme findes nedenfor. Denne medarbejderklasse implementerer Serialiserbar interface.

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 program vil blive udført med eksekvering, oprettes en fil, der hedder medarbejder.ser. Dette program leverer ikke en garanteret output, snarere er det kun til forklarende formål, og målet er at forstå dets anvendelse og arbejde.

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

Det nedenfor beskrevne DeserializeDemo-program deserialiserer ovennævnte Medarbejderobjekt oprettet 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);
)
)

Ovenstående kode giver følgende resultat -

Produktion

Deserialiseret medarbejder …

Navn: Rahul Jain

Adresse: epip, Bangalore

SSN: 0

Antal: 131

Nogle vigtige punkter relateret til programmet ovenfor er beskrevet nedenfor -

  • Try / fang-blokken ovenfor forsøger at fange en ClassNotFoundException. Dette erklæres ved hjælp af readObject () -metoden.
  • En JVM kan deserialisere et objekt, kun hvis den finder bytekoden for klassen.
  • Hvis JVM ikke finder en klasse under deserialiseringen, kaster den ClassNotFoundException.
  • returneringsværdien af ​​readObject () kastes altid til en medarbejderreference.
  • SSN-feltværdi var oprindeligt 114433, da objektet blev serialiseret, men da denne værdi ikke blev sendt til outputstrømmen. På grund af det samme er det deserialiserede medarbejder-SSN-feltobjekt 0.

Konklusion

Ovenfor introducerede vi serialiseringskoncepter og leverede eksempler. Lad os forstå behovet for serialisering som vores afsluttende bemærkninger.

  • Kommunikation: Hvis to maskiner, der kører den samme kode, skal kommunikere den lette udvej, er, at den ene maskine skal bygge et objekt, der indeholder oplysninger, som det vil overføre, og derefter serialisere det objekt, før det sendes til den anden maskine. Ikke en god metode, men får arbejdet gjort.
  • Persistens: Hvis drifttilstanden skal gemmes i en database, serialiseres den først til en byte-matrix og derefter lagres i databasen til hentning på et senere tidspunkt.
  • Dyb kopi: Hvis der skal oprettes en nøjagtig replikering af et objekt, og at skrive specialiseret klonklasse er for meget hårdt arbejde, vil det ved at kun serialisere objektet og derefter de-serialisere det til et andet objekt opnå målet.
  • Kryds JVM-synkronisering: forskellige JVM'er, der kører på forskellige maskiner og arkitekturer, kan synkroniseres.

Anbefalede artikler

Dette har været en guide til Serialisering i Java. Her har vi drøftet de forskellige metoder til serialisering i Java med eksempler. Du kan også se på den følgende artikel for at lære mere -

  1. Spørgsmål om Java-udviklerintervju
  2. Java-liste vs array-liste
  3. Brug af JavaScript

Kategori: