enligt Wikipedia är serialisering (eller serialisering) processen att översätta datastrukturer eller objekttillstånd till ett format som kan lagras (till exempel i en fil eller minnesbuffert) eller överföras (till exempel över en nätverksanslutningslänk) och rekonstrueras senare (eventuellt i en annan datormiljö).När den resulterande serien av bitar återläses enligt serialiseringsformatet kan den användas för att skapa en semantiskt identisk klon av det ursprungliga objektet.,
så i princip är serialisering en process för att konvertera ett objekt till en sekvens av byte som kan omvandlas till ett objekt.kvarstod till en disk eller Databas eller kan skickas via strömmar. Den omvända processen att skapa objekt från sekvens av byte kallas deserialisering.
serialisering och deserialisering i java
för att serialisera och deserialisera vårt objekt till en fil som vi behöver ringa ObjectOutputStream.writeObject()
och ObjectInputStream.readObject()
.,
en klass måste implementera Serialiserbart gränssnitt som finns ijava.io
– paketet för att serialisera objektet framgångsrikt. Serializable är ett markörgränssnitt som lägger serialiserbart beteende till klassen som implementerar den.
Java tillhandahåller Serialiserbara API inkapslade under java.io
paket för serialisering och deserialisering av objekt som inkluderar,
java.io.serializable
java.io.Externalizable
ObjectInputStream
- och
ObjectOutputStream
etc.,
pekar på
1. Om en överordnad klass har implementerat Serialiserbart gränssnitt behöver inte barnklassen implementera det, men vice versa är inte sant.
2. Endast icke-statiska datamedlemmar sparas via Serialiseringsprocessen.
3. Statiska datamedlemmar och transienta datamedlemmar sparas inte via serialisering process.So, om du inte vill spara värdet på en icke-statisk data medlem sedan göra det övergående.
4., Konstruktör av objekt kallas aldrig när ett objekt är deserialiserat.
5. Associerade objekt måste implementera Serialiserbart gränssnitt.
SerialVersionUID
serialization runtime associerar ett versionsnummer med varje serialiserbar klass som kallas en SerialVersionUID, som används under deserialisering för att verifiera att avsändaren och mottagaren av ett serialiserat objekt har laddat klasser för det objektet som är kompatibla med avseende på serialisering., Om mottagaren har laddat en klass för objektet som har olika UID än motsvarande avsändarens klass, kommer Deserialiseringen resultera i en InvalidClassException. En serialiserbar klass kan deklarera sin egen UID uttryckligen genom att deklarera ett fältnamn.
Den måste vara statisk, slutlig och av typen lång.
jag.,e – NÅGON-FI-MODIFIERAREN static final långa serialVersionUID=42L;
Om en serializable klass inte uttryckligen deklarerar en serialVersionUID, då serialisering runtime kommer att beräkna en standard för den klass, som bygger på olika aspekter av klass, som beskrivs i Java-Objekt Serialisering Specifikation. Det rekommenderas dock starkt att alla serialiserbara klasser uttryckligen deklarerar serialVersionUID-värde, eftersom beräkningen är mycket känslig för klassdetaljer som kan variera beroende på kompilatorimplementeringar, kan varje förändring i klass eller med olika id påverka serialiserade data.,
det rekommenderas också att använda privat modifierare för UID eftersom det inte är användbart som ärvt medlem.
vid transienta variabler:- en variabel som definieras med transienta sökord serialiseras inte under serialiseringsprocessen.Denna variabel initieras med standardvärde under deserialisering. (t. ex. för objekt är det null, för int är det 0).
vid statiska variabler:- en variabel som definieras med statiskt nyckelord serialiseras inte under serialiseringsprocessen.Denna variabel laddas med aktuellt värde definierat i klassen under deserialisering.,
serialisering i java
deserialisering
kontaktfältet är null eftersom det var markerat som statiskt och som vi har diskuterat tidigare statiska fält blir inte serialiserat.
OBS! statiska medlemmar serialiseras aldrig eftersom de är anslutna till klass inte objekt av klass.
- serialisering är processen att spara ett objekts tillstånd till en sekvens av byte som sedan kan lagras på en fil eller skickas över nätverket och deserialisering är processen att rekonstruera ett objekt från dessa byte.,
- endast underklasser i
Serializable
– gränssnittet kan serialiseras. - om vår klass inte implementerar
Serializable
gränssnitt eller om den har en referens till en ickeSerializable
klass då JVM kommer att kastaNotSerializableException
. - Alla
transient
ochstatic
fält får inte serialiseras. -
serialVersionUID
används för att verifiera att de serialiserade och deserialiserade objekten har samma attribut och därmed är kompatibla med deserialisering., - vi bör skapa ett
serialVersionUID
fält i vår klass så om vi ändrar vår klassstruktur (lägga till/ta bort fält) JVM kommer inte igenomInvalidClassException
. Om vi inte tillhandahåller det ger JVM en som kan förändras när vår klassstruktur ändras. - vi kan åsidosätta standard serialiseringsbeteendet i vår Java-klass genom att tillhandahålla implementeringen av
writeObject
ochreadObject
– metoder., - och vi kan ringa
ObjectOutputStream.defaultWriteObject()
ochObjectInputStream.defaultReadObject
frånwriteObject
ochreadObject
metoder för att få standard serialisering och deserialisering logik. - vi kan kasta
NotSerializableException
undantag frånwriteObject
ochreadObject
, om vi inte vill att vår klass ska serialiseras eller deserialiseras.
Leave a Reply