Som pr Wikipedia, serialisering (eller grund) er processen med at oversætte data strukturer eller objekter tilstand i et format, der kan gemmes (for eksempel, i en fil eller en memory buffer), eller overføres (for eksempel, på tværs af en netværksforbindelse link) og rekonstruerede senere (eventuelt i en anden computer, miljø).Når den resulterende serie af bits genlæses i henhold til serialiseringsformatet, kan den bruges til at oprette en semantisk identisk klon af det originale objekt.,
så dybest set Serialisering er en proces med at konvertere et objekt til en sekvens af bytes, der kan være varet en disk eller database, eller kan sendes via vandløb. Den omvendte proces med at skabe objekt fra sekvens af bytes kaldes deserialisering.
serialisering og deserialisering i java
for at serialisere og deserialisere vores objekt til en fil skal vi ringe tilObjectOutputStream.writeObject()
ogObjectInputStream.readObject()
.,
en klasse skal implementere Serialiserbar grænseflade til stede i java.io
pakke for at serialisere sit objekt med succes. Serialiableable er en markør interface, der tilføjer serialiizable adfærd til klassen gennemføre det.
Java giver Serializable API indkapslet under java.io
pakke til fortløbende og deserializing objekter, som omfatter,
java.io.serializable
java.io.Externalizable
ObjectInputStream
- og
ObjectOutputStream
osv.,
huskeliste
1. Hvis en forælder klasse har implementeret Serialiableable interface så barn klasse behøver ikke at gennemføre det, men omvendt er ikke sandt.
2. Kun ikke-statiske data medlemmer gemmes via serialisering proces.
3. Statiske data medlemmer og forbigående data medlemmer gemmes ikke via serialisering process.So, hvis du ikke vil gemme værdien af et ikke-statisk datamedlem, så gør det forbigående.
4., Konstruktør af objekt kaldes aldrig, når et objekt deserialiseres.
5. Tilknyttede objekter skal gennemføre Serialiserbar grænseflade.
SerialVersionUID
Serialisering runtime associerede virksomheder en version nummer med hver Serializable klasse kaldes en SerialVersionUID, som bruges i Deserialization for at kontrollere, at afsender og modtager af en føljeton objekt, der har lagt klasser for det pågældende objekt, der er kompatible med hensyn til serialisering., Hvis modtageren har indlæst en klasse for objektet, der har en anden UID end den tilsvarende afsenders klasse, deserialisering vil resultere i en Invalidclasse .ception. En Serialiserbar klasse kan erklære sin egen UID eksplicit ved at erklære et feltnavn.
det skal være statisk, endelig og af typen lang.
i.,e – ENHVER-ADGANG-MODIFIER static final long serialVersionUID=42L;
Hvis en serializable klasse ikke udtrykkeligt erklærer en serialVersionUID, så serialisering runtime vil beregne en standard for, at klassen er baseret på forskellige aspekter af klasse, som beskrevet i Java-Objekt Serialisering Specifikation. Det er dog stærkt anbefales, at alle serializable klasser udtrykkeligt erklærer serialVersionUID værdi, da dens beregningen er meget følsom over for klasse detaljer, der kan variere, afhængigt af compiler-implementeringer, vil enhver ændring i klassen eller med en anden id, der kan påvirke føljeton data.,
det anbefales også at bruge privat modifier til UID, da det ikke er nyttigt som nedarvet medlem.
i tilfælde af forbigående variabler:- en variabel defineret med forbigående søgeord er ikke føljeton under serialisering proces.Denne variabel initialiseres med standardværdi under deserialisering. (f.eks: for objekter er det null, for int er det 0).
i tilfælde af statiske variabler:- en variabel defineret med statisk nøgleord er ikke føljeton under serialisering proces.Denne variabel vil blive indlæst med den aktuelle værdi defineret i klassen under deserialisering.,
serialisering i java
deserialisering
kontaktfelt er null,fordi det var markeret som statisk, og som vi har diskuteret tidligere statiske felter ikke bliver føljeton.
Bemærk: statiske medlemmer er aldrig føljeton, fordi de er forbundet til klassen, der ikke er genstand for klassen.
- Serialisering er processen med at spare et objekts tilstand til en sekvens af bytes, som derefter kan gemmes på en fil eller sendes over nettet, og deserialisering er processen med at rekonstruere et objekt fra disse bytes.,
- kun underklasser af
Serializable
interface kan serialiseres. - Hvis vores klasse ikke gennemføre
Serializable
interface, eller hvis det er at have en reference til en ikkeSerializable
class så JVM vil smideNotSerializableException
. - alle
transient
ogstatic
felter bliver ikke føljeton. -
serialVersionUID
bruges til at verificere, at de serialiserede og deserialiserede objekter har de samme attributter og dermed er kompatible med deserialisering., - Vi skal oprette et
serialVersionUID
felt i vores klasse, så hvis vi ændrer vores klassestruktur (tilføjer/fjerner felter), vil JVM ikke gennemInvalidClassException
. Hvis vi ikke leverer det, giver JVM en, der kan ændre sig, når vores klassestruktur ændres. - Vi kan override default serialisering adfærd inde i vores Java-klasse, ved at give gennemførelsen af
writeObject
ogreadObject
metoder., - Og vi kan kalde
ObjectOutputStream.defaultWriteObject()
ogObjectInputStream.defaultReadObject
frawriteObject
ogreadObject
metoder til at få default serialisering og deserialisering logik. - , som Vi kan smide
NotSerializableException
undtagelse frawriteObject
ogreadObject
, hvis vi ikke ønsker, at vores klasse til at være føljeton eller deserialized.
Leave a Reply