serializacja jest procesem konwersji obiektu na sekwencję bajtów, które mogą być przechowywane na dysku lub bazie danych lub mogą być wysyłane przez strumienie. Odwrotny proces tworzenia obiektu z sekwencji bajtów nazywa się deserializacją.

klasa musi zaimplementować interfejs Serializowalny obecny w pakieciejava.io, aby pomyślnie serializować swój obiekt., Serializable jest interfejsem znaczników, który dodaje zachowanie serializowalne do implementującej je klasy.

Java dostarcza Serializowalne API zamknięte w java.io pakiet do serializacji i deserializacji obiektów, które obejmują

  • java.io.serializable
  • java.io.Externalizable
  • ObjectInputStream
  • ObjectOutputStream

Java marker interface

marker Interface jest specjalnym interfejsem w Javie bez żadnych pól i metod., Interfejs znacznika jest używany do informowania kompilatora, że implementująca go klasa ma jakieś specjalne zachowanie lub znaczenie. Niektóre przykłady interfejsu znacznika to

  • java.io.serializable
  • java.lang.Cloneable
  • java.rmi.Remote
  • java.util.RandomAccess

wszystkie te interfejsy nie mają żadnej metody i pola. Dodają one tylko specjalne zachowanie do klas implementujących je. Jednak interfejsy markerów były przestarzałe od czasu Javy 5, zostały zastąpione adnotacjami., Adnotacje są używane zamiast interfejsu znacznika, który odgrywa dokładnie taką samą rolę, jak interfejsy znacznika wcześniej.

aby zaimplementować serializację i deserializację, Java udostępnia dwie klasy ObjectOutputStream i ObjectInputStream.

Klasa ObjectOutputStream

służy do zapisu stanów obiektów do pliku. Obiekt implementujący interfejs java. io. Serializable może być zapisany do strams. Zapewnia różne metody wykonywania serializacji.

Klasa ObjectInputStream

Obiektinputstream deserializuje obiekty i prymitywne dane zapisywane przy użyciu ObjectOutputStream.,

metody writeobject() i readObject ()

writeObject() metoda klasyObjectOutputStream serializuje obiekt i wysyła go do strumienia wyjściowego.

public final void writeObject(object x) throws IOException

readObject() metodaObjectInputStream odwołuje się do obiektu ze strumienia i deserializuje go.

public final Object readObject() throws IOException,ClassNotFoundException

podczas serializacji jeśli nie chcesz, aby jakiekolwiek pole było częścią stanu obiektu, zadeklaruj je jako statyczne lub przejściowe w zależności od potrzeb i nie będzie uwzględniane podczas procesu serializacji java.,

przykład: Serializowanie obiektu w Javie

w tym przykładzie mamy klasę, która implementuje interfejs Serializowalny do serializacji obiektu.

obiekt klasy Studentinfo jest serializowany przy użyciu metodywriteObject() I zapisywany do plikustudent.txt.

przykład : Deserializacja obiektu w Javie

aby deserializować obiekt, używamy klasy ObjectInputStream, która odczyta obiekt z podanego pliku. Zobacz poniższy przykład.,

abhi104null

pole kontaktu jest null,ponieważ zostało oznaczone jako statyczne i jak już wcześniej omówiliśmy, pola statyczne nie są serializowane.

Uwaga: statyczne elementy nigdy nie są serializowane, ponieważ są połączone z klasą, A nie obiektem klasy.

słowo kluczowe transient

podczas serializacji obiektu, jeśli nie chcemy, aby określony element danych obiektu był serializowany, możemy wspomnieć o nim transient. słowo kluczowe transient uniemożliwi serializację tego elementu danych.,

class studentinfo implements Serializable { String name; transient int rid; static String contact;}
  • utworzenie członka danychtransient uniemożliwi jego serializację.
  • w tym przykładzierid nie będzie serializowane, ponieważ jest transientowe, acontact również pozostanie nieserializowane, ponieważ jest statyczne.

0