serializacja jest mechanizmem przekształcania stanu obiektu w strumień bajtów. Deserializacja jest procesem odwrotnym, w którym strumień bajtów jest używany do odtworzenia rzeczywistego obiektu Java w pamięci. Mechanizm ten służy do utrzymywania obiektu.
utworzony strumień bajtów jest niezależny od platformy. Tak więc obiekt serializowany na jednej platformie może być deserializowany na innej platformie.,
aby obiekt Java mógł być serializowany, implementujemy interfejs java.io.Serializable.
Klasa ObjectOutputStream zawiera metodę writeobject() do serializacji obiektu.
public final void writeObject(Object obj) throws IOException
Klasa ObjectInputStream zawiera metodę readObject() do deserializacji obiektu.
public final Object readObject() throws IOException, ClassNotFoundException
zalety serializacji
1. Aby zapisać / utrzymać stan obiektu.
2 . Aby podróżować obiektem po sieci.
tylko obiekty tych klas mogą być serializowane, które implementują interfejs java.io.Serializable.,
Serializable jest interfejsem znacznika (nie ma elementu danych ani metody). Jest on używany do „oznaczania” klas Javy, aby obiekty tych klas mogły uzyskać określone możliwości. Inne przykłady interfejsów znaczników to: – Cloneable i Remote.
punkty do zapamiętania
1. Jeśli Klasa macierzysta ma zaimplementowany interfejs Serializowalny, Klasa potomna nie musi go implementować, ale odwrotnie nie jest prawdą.
2 . Tylko niestatyczne elementy danych są zapisywane w procesie serializacji.
3. Statyczne elementy danych i przejściowe elementy danych nie są zapisywane w procesie serializacji.,Tak więc, jeśli nie chcesz zapisywać wartości niestatycznego elementu danych, zrób to jako transient.
4. Konstruktor obiektu nigdy nie jest wywoływany, gdy obiekt jest deserializowany.
5. Powiązane obiekty muszą implementować interfejs Serializowalny.
przykład :
class A implements Serializable{// B also implements Serializable// interface.B ob=new B(); }
SerialVersionUID
środowisko uruchomieniowe serializacji kojarzy numer wersji z każdą klasą Serializowalną o nazwie SerialVersionUID, która jest używana podczas deserializacji w celu sprawdzenia, czy nadawca i odbiorca serializowanego obiektu mają załadowane klasy dla tego obiektu, które są zgodne z serializacją., Jeśli odbiorca załadował klasę dla obiektu, który ma inny UID niż odpowiedni UID klasy nadawcy, Deserializacja spowoduje wystąpienie InvalidClassException. Klasa Serializowalna może zadeklarować swój własny UID jawnie deklarując nazwę pola.
musi być statyczny, końcowy i typu long.
i.,e-any-ACCESS-MODIFIER static final long serialVersionUID=42L;
Jeśli Klasa serializowalna nie deklaruje jawnie identyfikatora serialVersionUID, to środowisko uruchomieniowe serializacji obliczy domyślną dla tej klasy na podstawie różnych aspektów klasy, jak opisano w specyfikacji Java Object Serialization. Jednak zaleca się, aby wszystkie klasy serializowalne jawnie deklarowały wartość serialVersionUID, ponieważ jej obliczenia są bardzo wrażliwe na szczegóły klasy, które mogą się różnić w zależności od implementacji kompilatora, każda zmiana w klasie lub użycie innego id może mieć wpływ na dane serializowane.,
zaleca się również użycie modyfikatora prywatnego dla UID, ponieważ nie jest on użyteczny jako dziedziczony członek.
serialver
serialver jest narzędziem dostarczanym z JDK. Służy do uzyskania numeru serialVersionUID dla klas Java.,
możesz uruchomić następujące polecenie, aby uzyskać serialVersionUID
serialver
przykład 1:
Wyjście:
Object has been serializedObject has been deserialized a = 1b = geeksforgeeks
przykład 2:
wyjście:
Object has been serializedData before Deserialization.name = abage = 20a = 2b = 1000Object has been deserializedData after Deserialization.name = abage = 20a = 0b = 2000
opis wyjścia:
podczas deserializacji obiektu wartości a i b uległy zmianie. Powód, dla którego a oznaczono jako przejściowy, a b był statyczny.,
w przypadku zmiennych przejściowych: – zmienna zdefiniowana słowem kluczowym transient nie jest serializowana podczas procesu serializacji.Ta zmienna zostanie zainicjowana wartością domyślną podczas deserializacji. (np.: dla obiektów jest null, dla int jest 0).
W przypadku zmiennych statycznych: – zmienna zdefiniowana słowem kluczowym statyczny nie jest serializowana podczas procesu serializacji.Ta zmienna zostanie załadowana z bieżącą wartością zdefiniowaną w klasie podczas deserializacji.
Ten artykuł jest napisany przez Mehak Narang i Shubham Juneja., Jeśli lubisz GeeksforGeeks i chciałbyś przyczynić się do tego, możesz również napisać artykuł za pomocą contribute.geeksforgeeks.org lub wyślij artykuł do [email protected]. Zobacz swój artykuł pojawiający się na stronie głównej GeeksforGeeks i pomóż innym Geekom.
proszę pisać komentarze, jeśli znajdziesz coś błędnego, lub chcesz podzielić się więcej informacji na temat omawiany powyżej.
Uwaga czytelniku! Nie przestawaj się teraz uczyć., Zdobądź wszystkie ważne koncepcje Java Foundation i Collections dzięki kursowi podstawy Javy i kolekcji Java w przyjaznej dla studentów cenie i stań się gotowy na branżę.