serializarea este un mecanism de conversie a stării unui obiect într-un flux de octeți. Deserializarea este procesul invers în care fluxul de octeți este utilizat pentru a recrea obiectul Java real în memorie. Acest mecanism este folosit pentru a persista obiectul.
byte flux creat este independent de platformă. Deci, obiectul serializat pe o singură platformă poate fi deserializat pe o altă platformă.,pentru a face un obiect Java serializable implementăm interfața java. io. Serializable.
Clasa ObjectOutputStream conține metoda writeObject () pentru serializarea unui obiect.
public final void writeObject(Object obj) throws IOException
clasa ObjectInputStream conține readObject() metoda pentru deserializing un obiect.
public final Object readObject() throws IOException, ClassNotFoundException
avantajele serializării
1. Pentru a salva / persista starea unui obiect.
2. Pentru a călători un obiect într-o rețea.numai obiectele din acele clase pot fi serializate care implementează interfața java. io. Serializable.,
Serializable este o interfață marker (nu are nici un membru de date și metoda). Este folosit pentru a” marca ” clase java, astfel încât obiectele din aceste clase pot obține anumite capacități. Alte exemple de interfețe marker sunt: – Cloneable și la distanță.
puncte de reținut
1. Dacă o clasă părinte a implementat o interfață Serializabilă, atunci clasa copil nu trebuie să o implementeze, dar invers nu este adevărat.
2. Numai membrii de date non-statice sunt salvate prin procesul de serializare.
3. Membrii de date statice și membrii de date tranzitorii nu sunt salvate prin procesul de serializare.,Deci, dacă nu doriți să salvați valoarea unui membru de date non-statice, atunci faceți-o tranzitorie.
4. Constructor de obiect nu este numit atunci când un obiect este deserializat.
5. Obiectele asociate trebuie să implementeze o interfață Serializabilă.
Exemplu :
class A implements Serializable{// B also implements Serializable// interface.B ob=new B(); }
SerialVersionUID
Serialization runtime asociați un număr de versiune cu fiecare Serializable clasa a sunat un SerialVersionUID, care este utilizat în timpul Deserializarea pentru a verifica dacă expeditor și receptor a unui obiect serializat au încărcat clase pentru acel obiect, care sunt compatibile cu respectul pentru serializare., Dacă receptorul a încărcat o clasă pentru obiectul care are UID diferit de cel al clasei expeditorului corespunzător, deserializarea va avea ca rezultat o InvalidClassException. O clasă Serializable poate declara propria UID în mod explicit prin declararea unui nume de câmp.
trebuie să fie static, final și de tip lung.
i.,e-ANY-access-modificator static final long serialVersionUID=42L;
dacă o clasă serializable nu declară în mod explicit un serialVersionUID, atunci timpul de rulare serializare va calcula unul implicit pentru acea clasă pe baza diferitelor aspecte ale clasei, așa cum este descris în caietul de sarcini Java obiect serializare. Cu toate acestea, este recomandat ca toate clasele serializable să declare în mod explicit valoarea serialVersionUID, deoarece calculul său este foarte sensibil la detaliile clasei care pot varia în funcție de implementările compilatorului, orice modificare a clasei sau utilizarea unui id diferit poate afecta datele serializate.,
de asemenea, este recomandat să utilizați modificator privat pentru UID, deoarece nu este util ca membru moștenit.
serialver
serialver este un instrument care vine cu JDK. Este folosit pentru a obține serialVersionUID număr pentru clasele Java.,
Aveți posibilitatea să executați următoarea comandă pentru a obține serialVersionUID
serialver
Exemplu 1:
Ieșire :
Object has been serializedObject has been deserialized a = 1b = geeksforgeeks
Exemplu 2:
Ieșire:
Object has been serializedData before Deserialization.name = abage = 20a = 2b = 1000Object has been deserializedData after Deserialization.name = abage = 20a = 0b = 2000
Descriere pentru Ieșire:
Te-am văzut în timp ce deserializing obiect valorile a și b s-a schimbat. Motivul fiind a a fost marcat ca tranzitoriu și b a fost static.,
În cazul variabilelor tranzitorii: – o variabilă definită cu cuvântul cheie tranzitoriu nu este serializată în timpul procesului de serializare.Această variabilă va fi inițializată cu valoarea implicită în timpul deserializării. (de exemplu: pentru obiecte este nul, pentru int este 0).
În cazul variabilelor statice: – o variabilă definită cu cuvântul cheie static nu este serializată în timpul procesului de serializare.Această variabilă va fi încărcată cu valoarea curentă definită în clasă în timpul deserializării.acest articol este contribuit de Mehak Narang și Shubham Juneja., Dacă vă place GeeksforGeeks și ar dori să contribuie, de asemenea, puteți scrie un articol folosind contribute.geeksforgeeks.org sau e-mail la art. [email protected]. Vezi articolul apare pe GeeksforGeeks pagina principală și de a ajuta alte Geeks.
vă rugăm să scrieți comentarii dacă găsiți ceva incorect sau doriți să împărtășiți mai multe informații despre subiectul discutat mai sus.
cititor de atenție! Nu te opri din învățat acum., Faceți rost de toate conceptele importante ale Fundației și Colecțiilor Java cu fundamentele cursului Java și Java Collections la un preț prietenos pentru studenți și deveniți gata pentru industrie.