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 danych
transient
uniemożliwi jego serializację. - w tym przykładzie
rid
nie będzie serializowane, ponieważ jest transientowe, acontact
również pozostanie nieserializowane, ponieważ jest statyczne.