serializace je mechanismus konverze stavu objektu na bajtový proud. Deserializace je reverzní proces, kdy se bajtový proud používá k obnovení skutečného objektu Java v paměti. Tento mechanismus se používá k přetrvávání objektu.
vytvořený byte stream je nezávislý na platformě. Takže objekt serializovaný na jedné platformě může být deserializován na jiné platformě.,
aby byl objekt Java serializovatelný, implementujeme rozhraní java. Io. Serializable.
Třída ObjectOutputStream obsahuje metodu writeObject () pro serializaci objektu.
public final void writeObject(Object obj) throws IOException
ObjectInputStream třída obsahuje readObject() metoda, při rekonstrukci objektu.
public final Object readObject() throws IOException, ClassNotFoundException
výhody serializace
1. Chcete-li uložit/přetrvávat stav objektu.
2. Chcete-li cestovat objekt přes síť.
Pouze objekty z těchto tříd může být serializován, které jsou prováděcí java.io.Serializable rozhraní.,
Serializable je markerové rozhraní (nemá žádný datový člen a metodu). Používá se k označení tříd java tak, aby objekty těchto tříd mohly získat určitou schopnost. Další příklady markerových rozhraní jsou: – Klonovatelné a vzdálené.
body k zapamatování
1. Pokud mateřská třída implementovala Serializovatelné rozhraní, nemusí ji dětská třída implementovat, ale naopak není pravda.
2. Prostřednictvím Serializačního procesu jsou ukládány pouze nestatické datové členy.
3. Statické datové členy a přechodné datové členy nejsou uloženy prostřednictvím Serializačního procesu.,Pokud tedy nechcete uložit hodnotu nestatického datového člena,udělejte z něj přechodný.
4. Konstruktor objektu není nikdy volán, když je objekt deserializován.
5. Přidružené objekty musí implementovat Serializovatelné rozhraní.
Příklad :
class A implements Serializable{// B also implements Serializable// interface.B ob=new B(); }
SerialVersionUID
runtime Serializace associates číslo verze s každou Serializable třídy nazývá SerialVersionUID, která se používá při Rekonstrukci ověřit, že odesílatel a přijímač se o serializovaný objekt vložili třídy pro daný objekt, které jsou kompatibilní s ohledem na serializaci., Pokud přijímač načte třídu pro objekt, který má jiné UID než třída odpovídající odesílatele, Deserializace povede k InvalidClassException. Serializovatelná třída může explicitně deklarovat své vlastní UID prohlášením názvu pole.
musí být statické, konečné a typu dlouhé.
i.,e – JAKÉKOLIV-PŘÍSTUP-MODIFIKÁTOR static final dlouho serialVersionUID=42L;
Pokud serializable třídy není explicitně deklarovat serialVersionUID, pak runtime serializace bude počítat jako výchozí pro tuto třídu na základě různých aspektů třídy, jak je popsáno v Java Objekt Serializace Specifikace. Však se důrazně doporučuje, aby všechny serializable tříd explicitně deklarovat serialVersionUID hodnotu, neboť jeho výpočet je velmi citlivý na třídě detaily, které se mohou lišit v závislosti na kompilátor implementace, jakákoli změna ve třídě nebo pomocí různých id může mít vliv na serializovaná data.,
doporučuje se také použít soukromý modifikátor pro UID, protože není užitečný jako zděděný člen.
serialver
serialver je nástroj, který je dodáván s JDK. Používá se k získání čísla serialVersionUID pro třídy Java.,
můžete spustit následující příkaz, aby si serialVersionUID
serialver
Příklad 1:
Výstup :
Object has been serializedObject has been deserialized a = 1b = geeksforgeeks
Příklad 2:
Výstup:
Object has been serializedData before Deserialization.name = abage = 20a = 2b = 1000Object has been deserializedData after Deserialization.name = abage = 20a = 0b = 2000
Popis pro Výstup:
Jste viděli, zatímco při rekonstrukci objektu, hodnoty a a b se změnil. Důvod a byl označen jako přechodný a b byl statický.,
V případě přechodných proměnných: – proměnná definovaná pomocí přechodného klíčového slova není během serializačního procesu serializována.Tato proměnná bude inicializována s výchozí hodnotou během deserializace. (např.: pro objekty je null, pro int je 0).
V případě statických proměnných: – proměnná definovaná statickým klíčovým slovem není serializována během serializačního procesu.Tato proměnná bude načtena s aktuální hodnotou definovanou ve třídě během deserializace.
tento článek přispívají Mehak Narang a Shubham Juneja., Pokud se vám líbí GeeksforGeeks a chtěli byste přispět, můžete také napsat článek pomocí contribute.geeksforgeeks.org nebo napište svůj článek na [email protected]. Viz váš článek se objeví na GeeksforGeeks hlavní stránce a pomoci jiných Mágů.
napište prosím komentáře, pokud zjistíte něco nesprávného, nebo chcete sdílet více informací o tématu diskutovaném výše.
čtenář pozornosti! Nepřestávej se učit., Sehnat všech důležitých Java Foundation a sbírek konceptů se základy Java a Java kolekcí kurzu za student-friendly cenu a stát se průmysl připraven.