conform Wikipedia, serialization (sau serialisation) este procesul de traducere structuri de date sau un obiect stat într-un format care pot fi stocate (de exemplu, într-un fișier sau memorie tampon) sau transmise (de exemplu, peste o conexiune de rețea link) și reconstruită mai târziu (eventual într-un alt mediu de computer).Când seria de biți rezultată este recitită în funcție de formatul de serializare, aceasta poate fi utilizată pentru a crea o clonă identică semantic a obiectului original.,
deci, practic, Serializarea este un proces de conversie a unui obiect într-o secvență de octeți care pot fi persistat pe un disc sau de baze de date sau pot fi trimise prin fluxuri. Procesul invers de creare a obiectului din secvența de octeți se numește deserializare.pentru a serializa și deserializa Obiectul nostru într-un fișier trebuie să apelăm ObjectOutputStream.writeObject()
și ObjectInputStream.readObject()
.,
o clasă trebuie să pună în aplicare Interfață Serializable prezent în java.io
pachet pentru a serializa obiectul său cu succes. Serializable este o interfață marker care adaugă un comportament serializable la clasa de punere în aplicare ea.
Java oferă Serializable API încapsulate sub java.io
pachet pentru serializarea și deserializing obiecte care includ,
java.io.serializable
java.io.Externalizable
ObjectInputStream
- și
ObjectOutputStream
etc.,
Puncte pentru a aminti
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 serializare process.So, dacă nu doriți să salvați valoarea unui membru de date non-statice, atunci faceți-l tranzitoriu.
4., Constructor de obiect nu este numit atunci când un obiect este deserializat.
5. Obiectele asociate trebuie să implementeze o interfață Serializabilă.SerialVersionUID runtime Serialization asociază un număr de versiune cu fiecare clasă Serializable numit SerialVersionUID, care este utilizat în timpul Deserialization pentru a verifica dacă expeditor și receptor al unui obiect serializat au încărcat clase pentru acel obiect care sunt compatibile cu privire la 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.
Î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.,
serializarea în java
deserializarea
câmpul de Contact este nul deoarece,a fost marcat ca static și așa cum am discutat mai devreme câmpurile statice nu se serializează.
notă: membrii statici nu sunt serializate, deoarece acestea sunt conectate la clasa Nu obiect de clasă.
- serializarea este procesul de salvare a stării unui obiect într-o secvență de octeți care apoi pot fi stocate într-un fișier sau trimise prin rețea și deserializarea este procesul de reconstruire a unui obiect din acei octeți.,
- numai subclase ale
Serializable
interfață poate fi serializat. - Dacă clasa noastră nu pune în aplicare
Serializable
interfață sau dacă acesta are o trimitere la un nonSerializable
clasa apoi JVM va aruncaNotSerializableException
. - Toate
transient
șistatic
domenii nu te serializat. -
serialVersionUID
este folosit pentru a verifica dacă serializat și deserialized obiecte au aceleași atribute și, astfel, sunt compatibile cu deserializarea., - Noi ar trebui să creeze un
serialVersionUID
teren în clasa noastră dacă ne schimbăm structura de clasă (adăugarea/eliminarea de câmpuri) JVM nu prinInvalidClassException
. Dacă nu o furnizăm, JVM oferă una care s-ar putea schimba atunci când structura clasei noastre se schimbă. - putem trece peste implicit de serializare a comportamentului în clasă Java prin furnizarea de punerea în aplicare a
writeObject
șireadObject
metode., - Și putem numi
ObjectOutputStream.defaultWriteObject()
șiObjectInputStream.defaultReadObject
de lawriteObject
șireadObject
metode pentru a obține default serializarea și deserializarea logica. - putem arunca
NotSerializableException
excepție de lawriteObject
șireadObject
, dacă nu vrem clasa noastră să fie serializat sau deserialized.
Leave a Reply