Som per Wikipedia, serialisering (eller serialisation) er prosessen med å oversette data strukturer eller objekt staten til et format som kan lagres (for eksempel, i en fil eller memory buffer) eller overføres (for eksempel, via en nettverkstilkobling link) og rekonstruert senere (muligens i en annen datamaskin miljø).Når den resulterende serie biter som er lest i henhold til bedriften format, det kan brukes til å lage en semantisk identiske kopier av det originale objektet.,
så i utgangspunktet Bedriften er en prosess med å konvertere et objekt inn i en sekvens av bytes som kan være faste til en disk eller database eller kan bli sendt gjennom bekker. Den omvendte prosessen med å opprette objektet fra sekvens av bytes kalles deserialisering.
Serialisering og Deserialisering i java
for Å serialisere og deserialisere våre objekt til en fil, trenger vi å ringe ObjectOutputStream.writeObject()
og ObjectInputStream.readObject()
.,
En klasse må gjennomføre Serialiserbare grensesnitt til stede i java.io
pakke for å serialisere formål å lykkes. Serialiserbare er en markør grensesnitt som legger til serialiserbare atferd til klasse å gjennomføre den.
Java gir Serialiserbare API innkapslet under java.io
pakke for serializing og deserializing objekter som inkluderer,
java.io.serializable
java.io.Externalizable
ObjectInputStream
- og
ObjectOutputStream
osv.,
Punkter å huske
1. Hvis en forelder klasse har implementert Serialiserbare grensesnitt så barnet klassen trenger ikke å gjennomføre det, men omvendt er ikke sant.
2. Bare ikke-statiske data medlemmer er lagret via Serialisering prosessen.
3. Statiske data medlemmer og forbigående data medlemmer er ikke lagret via Serialisering prosessen.Så, hvis du ikke ønsker å lagre verdien av en ikke-statiske data medlem da gjøre det forbigående.
4., Constructor av objektet aldri kalles når et objekt er deserialized.
5. Forbundet objekter må være å implementere Serialiserbare grensesnitt.
SerialVersionUID
Serialisering runtime tilordner en versjon nummer med hvert Serialiserbare klasse kalt en SerialVersionUID, som brukes under Deserialisering til å bekrefte at avsender og mottaker av en føljetong objekt har lagt klasser for det objektet som er kompatible med hensyn til bedriften., Hvis mottakeren har lagt i en klasse for objektet som har annen VÆSKE enn tilsvarende avsenderens klasse, Deserialisering vil resultere i en InvalidClassException. En Serialiserbare klasse kan erklære sin egen UID eksplisitt ved å erklære et feltnavn.
Det må være statiske, endelige og av typen lenge.
jeg.,e – ALL-ACCESS-MODIFIER static final lang serialVersionUID=42L;
Hvis en serialiserbare klasse ikke uttrykkelig erklærer en serialVersionUID, så serialisering runtime vil beregne en standard som klasse basert på ulike aspekter av klasse, som beskrevet i Java-Objekt Serialisering Spesifikasjon. Imidlertid er det sterkt anbefalt at alle serialiserbare klasser uttrykkelig erklærer serialVersionUID verdi, siden beregning er svært sensitive til klasse detaljer som kan variere avhengig av kompilatoren implementeringer, noen endring i klassen eller ved hjelp av ulike id kan påvirke serialisert data.,
Det er også anbefalt å bruke private modifikator for VÆSKE, siden det er ikke nyttig som arvet medlem.
I tilfelle av forbigående variabler:- En variabel som er definert med forbigående søkeord er ikke serialisert i løpet av bedriften prosessen.Denne variabelen vil være initialisert med standard verdi under deserialisering. (e.g: for objekter det er null, for int det er 0).
I tilfelle av statiske Variabler:- En variabel som er definert med statisk søkeord er ikke serialisert i løpet av bedriften prosessen.Denne variabelen vil bli lastet med gjeldende verdien som er definert i klassen under deserialisering.,
Serialisering i java
Deserialisering
Kontakt feltet er null fordi det var merket som statisk og som vi har diskutert tidligere statiske felt ikke blir serialisert.
MERK: Statiske medlemmer er aldri serialisert fordi de er koblet til klasse ikke objekt av klassen.
- Serialisering er prosessen med å lagre en objektets tilstand til en sekvens av bytes som deretter kan lagres på en fil eller sendes over nettverket og deserialisering er prosessen med å konstruere et objekt fra de byte.,
- Bare underklasser av
Serializable
grensesnitt kan være serialisert. - Hvis klassen ikke har implementert
Serializable
grensesnitt eller om det er å ha en henvisning til en ikkeSerializable
klasse så JVM vil kasteNotSerializableException
. - Alle
transient
ogstatic
feltene ikke får serialisert. -
serialVersionUID
brukes til å bekrefte at serialisert og deserialized objekter har samme egenskaper og er dermed kompatibel med deserialisering., - Vi bør lage en
serialVersionUID
– feltet i klassen vår, så hvis vi endrer vår klasse struktur (legge til/fjerne felt) JVM ikke gjennomInvalidClassException
. Hvis vi ikke gir dem JVM gir en som kan endre seg når klassen vår struktur endringer. - Vi kan overstyre standard serialisering atferd inne i våre Java-klassen ved å gi gjennomføringen av
writeObject
ogreadObject
metoder., - Og vi kan kalle
ObjectOutputStream.defaultWriteObject()
ogObjectInputStream.defaultReadObject
frawriteObject
ogreadObject
metoder for å få standard serialisering og deserialisering logikk. - kan Vi kaste
NotSerializableException
unntak frawriteObject
ogreadObject
, hvis vi ikke ønsker at våre klassen til å være serialisert eller deserialized.
Leave a Reply