Jako na Wikipedii, serializace (nebo sériové) je proces překládání datové struktury nebo stav objektu do formátu, který mohou být uloženy (například v souboru nebo vyrovnávací paměť), nebo přenosné (například, přes připojení k síti odkaz) a rekonstruovány později (možná v jiném prostředí počítače).Když výsledný série bitů je přečetla v závislosti na formát serializace, to může být použit k vytvoření sémanticky identický klon původního objektu.,
takže v podstatě Serializace je proces převodu objektu do posloupnosti bajtů, která může být trval na disku nebo databáze, nebo mohou být zaslány prostřednictvím datové proudy. Reverzní proces vytváření objektu ze sekvence bajtů se nazývá deserializace.
Serializace a Deserializace v javě
K serializaci a deserializaci náš objekt do souboru budeme muset volat ObjectOutputStream.writeObject()
ObjectInputStream.readObject()
.,
třída musí implementovat rozhraní Serializable přítomen v java.io
balení za účelem jeho serializaci objektu úspěšně. Serializable je markerové rozhraní, které přidává serializovatelné chování do třídy, která jej implementuje.
Java poskytuje Serializable rozhraní API zapouzdřené pod java.io
balíček pro serializace a při rekonstrukci objektů,které zahrnují,
java.io.serializable
java.io.Externalizable
ObjectInputStream
- a
ObjectOutputStream
atd.,
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 serializace process.So, pokud nechcete uložit hodnotu nestatického datového členu, udělejte to přechodným.
4., Konstruktor objektu není nikdy volán, když je objekt deserializován.
5. Přidružené objekty musí implementovat Serializovatelné rozhraní.
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říjemce 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.
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.,
Serializace v javě
Rekonstrukce
Kontaktní pole je null,protože to byl označen jako static a jak jsme diskutovali dříve statické pole není serializovaný.
poznámka: statické členy nejsou nikdy serializovány, protože jsou připojeny ke třídě, která není předmětem třídy.
- Serializace je proces ukládání stavu objektu na posloupnost bajtů, které pak mohou být uloženy v souboru nebo odeslat přes síť a deserializace je proces rekonstrukce objektu z těch bajtů.,
- lze serializovat pouze podtřídy rozhraní
Serializable
. - je-Li naše třída neimplementuje
Serializable
rozhraní nebo pokud je odkaz na nonSerializable
třídy pak JVM bude hoditNotSerializableException
. -
transient
static
pole nenechte se na pokračování. -
serialVersionUID
je použit k ověření, že serializovat a rekonstruovat objekty mají stejné atributy a jsou tedy kompatibilní s deserializace., - měli bychom v naší třídě vytvořit pole
serialVersionUID
, takže pokud změníme strukturu třídy (přidávání/odebírání polí), JVM nebude procházetInvalidClassException
. Pokud nebudeme poskytovat to JVM poskytuje ten, který by se mohl změnit, když se změní naše struktura třídy. - můžeme přepsat výchozí serializace chování uvnitř naší třídy Java poskytnutím plnění
writeObject
readObject
metody., - můžeme to nazvat
ObjectOutputStream.defaultWriteObject()
ObjectInputStream.defaultReadObject
writeObject
readObject
metody, aby se výchozí serializace a deserializace logiku. - můžeme hodit
NotSerializableException
výjimkywriteObject
readObject
, pokud nechceme, aby naše třída bude serializovat nebo rekonstruován.
Leave a Reply