Серијализација у Јави

Серијализација у Јави је механизам који претвара стање објекта у бајт ток. Десеријализација је њен обрнути процес. Десериализацијом из бајт стреам-а ствара се стварни Јава објект у меморији. Такав механизам истраје у објекту.

Тако направљен бајт током сериализације не зависи од платформе. Објект сериализован на једној платформи може се десериализовати на било којој другој платформи без икаквог проблема. Стога је целокупни процес сериализације и десериализације независан од ЈВМ-а.

Ако се предмет класе жели сериализовати, потребно је имплементирати јава.ио.Сериализабле сучеље. Сериализабле ин јава је маркер интерфејс. Нема поља или методе за имплементацију. Овај процес сериализује класу која изгледа као Опт-Ин процес.

Серијализацију у Јави имплементирају две класе ОбјецтИнпутСтреам и ОбјецтОутпутСтреам.

Све што је потребно је омотач преко њих, тако да се они могу спремити у датотеку или послати мрежом.

Концепт сериализације у Јави

Класа ОбјецтОутпутСтреам која је класа сериализације као што је споменуто у горњем одељку садржи неколико метода писања за писање различитих типова података, али једна је метода најпопуларнија

public final void writeObject(Object x) throws IOException

Горња метода се може користити за сериализацију објекта. Овај метод га такође шаље у излазни ток. На исти начин, класа ОбјецтИнпутСтреам садржи методу за десеријализацију објеката

public final Object readObject() throws IOException, ClassNotFoundException

Метода десериализације дохваћа објект из тока и десериализира исти. Повратна вриједност је поново објект, тако да све што је потребно је да се она баци на одговарајући тип података.

Да би се настава успешно сериализовала, морају се испунити два услова -

  • ио. Серијализабилно сучеље мора имплементирати класа.
  • Сва поља класе морају бити сериализабилна. Ако ни једно поље није могуће серијски извршити, онда га треба означити пролазним.

Ако неко треба да провери да ли је класа сериализабилна или не, једноставно решење је проверити да ли класа примењује методу јава.ио.Сериализабле, ако јесте, онда је сериализабилна ако није, онда није.

Треба приметити да приликом сериализације објекта у датотеку стандардна пракса даје датотеци екстензију .сер.

Начин сериализације у Јави

Ако су ове методе присутне у класи, они се користе за сериализацију у Јава сврху.

Метод Опис
јавна финална воид вритеОбјецт (Објецт обј) баца ИОЕкцептион ()Ово ће уписати наведени објект у ОбјецтОутпутСтреам.
публиц воид флусх () баца ИОЕкцептион ()Ово ће испрати тренутни излазни ток.
публиц воид цлосе () баца ИОЕкцептион ()Ово ће затворити тренутни излазни ток.

Метода десериализације у Јави

Метод Опис
јавни завршни објекат реадОбјецт () баца ИОЕкцептион, ЦлассНотФоундЕкцептион ()Ово ће очитати објект из улазног тока.
публиц воид цлосе () баца ИОЕкцептион ()Ово ће затворити ОбјецтИнпутСтреам.

Примери сериализације у Јави

У овом одељку смо са примерима разговарали о сериализацији на Јави.

Овде је дат пример у Јави који показује како сериализација делује на Јави. Стварамо класу Емплоиее да проучимо неке карактеристике, а код за исте је дат у наставку. Ова класа запослених имплементира серијски прилагодљив интерфејс.

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

Када се овај програм обави извршењем, биће креирана датотека под називом запослени.сер. Овај програм не даје гарантовани резултат, већ је само у објашњене сврхе и разумевање његове употребе и рада.

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

Доље описани програм ДесериализеДемо десериализира горе наведени објект Емплоиее креиран у програму Сериализе Демо .

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

Горњи код ће произвести следећи резултат -

Излаз

Десериализовани запослени…

Име: Рахул Јаин

Адреса: епип, Бангалоре

ССН: 0

Број: 131

Неке важне тачке у вези са горњим програмом дате су у даљем тексту -

  • Горњи блок три / цатцх покушава ухватити ЦлассНотФоундЕкцептион. Ово је декларисано методом реадОбјецт ().
  • ЈВМ може десеријализирати објект, само ако пронађе бајт код за класу.
  • Ако ЈВМ не нађе класу током десериализације, избациће ЦлассНотФоундЕкцептион.
  • повратна вредност реадОбјецт () увек се односи на референцу Емплоиее.
  • Вриједност ССН поља била је првобитно 114433 када је објект сериализован, али како та вриједност није послата у излазни ток. Због истог, десеријализовани ССН објект поља је 0.

Закључак

Горе смо увели концепте сериализације и дали примере. Схватимо потребу за сериализацијом као наше закључне примедбе.

  • Комуникација: Ако две машине са истим кодом требају комуницирати на једноставан начин, једна машина треба да направи објекат који садржи информације које ће пренијети, а затим серијски отворити тај објект пре него што га пошаље на другу машину. Није сјајна метода, али посао се обавља.
  • Постојаност: Ако се стање рада жели похранити у базу података, прво се сериализује у бајт низ, а затим се чува у бази података ради каснијег проналаска.
  • Дубока копија: Ако је потребно креирати тачну копију објекта и писати специјализирану класу клона превише је напорног рада, само сериализацијом објекта и затим десериализацијом у други објект постиже се циљ.
  • Унапређена ЈВМ синхронизација: различити ЈВМ- ови који раде на различитим машинама и архитектурама могу се синхронизовати.

Препоручени чланци

Ово је водич за сериализацију на Јави. Овде смо са примерима дискутовали о различитим методама сериализације у Јави. Такође можете погледати следећи чланак да бисте сазнали више -

  1. Питања о интервјуу за Јава програмере
  2. Јава Лист вс Арраи Лист
  3. Употреба ЈаваСцрипт-а

Категорија: