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.
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
ObjectOutputStream
Java Marker rozhraní
Značka Rozhraní je speciální rozhraní v jazyce Java, bez jakýchkoliv pole a metody., Marker interface se používá k informování kompilátoru, že třída, která jej implementuje, má určité zvláštní chování nebo význam. Nějaký příklad Marker interface jsou,
java.io.serializable
java.lang.Cloneable
java.rmi.Remote
java.util.RandomAccess
Všechna tato rozhraní nemá žádné metody a pole. Do tříd, které je implementují, přidávají pouze zvláštní chování. Rozhraní markerů však byla od Java 5 zastaralá, byla nahrazena anotacemi., Anotace se používají místo Marker rozhraní, které hrají přesně stejnou roli jako marker rozhraní dělal předtím.
pro implementaci serializace a deserializace poskytuje Java dvě třídy ObjectOutputStream a ObjectInputStream.
ObjectOutputStream class
používá se k zápisu stavů objektů do souboru. Objekt, který implementuje java. Io. Serializable rozhraní lze zapsat do strams. Poskytuje různé metody pro provádění serializace.
ObjectInputStream třídy
ObjectInputStream deserializes objekty a primitivní datové napsané pomocí ObjectOutputStream.,
writeObject() a readObject() Metody
writeObject()
metoda ObjectOutputStream
třídy serializuje objekt a odeslat ji na výstup stream.
public final void writeObject(object x) throws IOException
readObject()
metoda ObjectInputStream
class reference objektu z proudu a rekonstruovat.
public final Object readObject() throws IOException,ClassNotFoundException
při serializaci, pokud nechcete, aby jakékoli pole bylo součástí stavu objektu, prohlaste jej buď statickým nebo přechodným na základě vaší potřeby a nebude zahrnuto během procesu serializace java.,
Příklad: Serializace Objektu v Javě
V tomto příkladu máme třídu, která implementuje rozhraní Serializable, aby se její objekt serializován.
objekt třídy Studentinfo je serializován pomocí metodywriteObject()
a zapsán do souboru student.txt
.
příklad: Deserializace objektu v Javě
pro deserializaci objektu používáme třídu ObjectInputStream, která objekt přečte ze zadaného souboru. Viz níže uvedený příklad.,
Abhi104null
kontaktní pole je null, protože bylo označeno jako statické a jak jsme diskutovali dříve, statická pole nejsou serializována.
poznámka: statické členy nejsou nikdy serializovány, protože jsou připojeny ke třídě, která není předmětem třídy.
přechodné Klíčové slovo
při serializaci objektu, pokud nechceme, aby byl určitý datový člen objektu serializován, můžeme jej zmínit přechodně. přechodné Klíčové slovo zabrání tomu, aby byl člen dat serializován.,
class studentinfo implements Serializable { String name; transient int rid; static String contact;}
- vytvoření datového člena
transient
zabrání jeho serializaci. - V tomto příkladu
rid
nebude pokračování, protože to je pomíjivé, acontact
bude i nadále unserialized, protože je statická.