serialisatie is een mechanisme om de status van een object om te zetten in een bytestream. Deserialisatie is het omgekeerde proces waarbij de byte-stream wordt gebruikt om het eigenlijke Java-object in het geheugen opnieuw te maken. Dit mechanisme wordt gebruikt om het object aan te houden.
de gecreëerde bytestroom is platformonafhankelijk. Dus, het object geserialiseerd op een platform kan worden gedeserialiseerd op een ander platform.,
om een Java-object serialiseerbaar te maken, implementeren we de Java.io.Serialiseerbare interface.
De ObjectOutputStream klasse bevat writeobject () methode voor het serialiseren van een Object.
public final void writeObject(Object obj) throws IOException
De ObjectInputStream klasse bevat readobject() methode voor het deserialiseren van een object.
public final Object readObject() throws IOException, ClassNotFoundException
voordelen van serialisatie
1. De status van een object opslaan/aanhouden.
2. Om een object over een netwerk te reizen.
alleen de objecten van die klassen kunnen worden geserialiseerd die java.io.Serialisable interface implementeren.,
serialiseerbaar is een marker interface (heeft geen data lid en methode). Het wordt gebruikt om “markeren” java klassen, zodat objecten van deze klassen bepaalde mogelijkheden kunnen krijgen. Andere voorbeelden van marker interfaces zijn: – Cloneable en Remote.
punten om
te onthouden 1. Als een ouderklasse Serialiseerbare interface heeft geïmplementeerd, hoeft child class deze niet te implementeren, maar vice versa is niet waar.
2. Alleen niet-statische gegevens leden worden opgeslagen via serialisatie proces.
3. Statische gegevens leden en tijdelijke gegevens leden worden niet opgeslagen via serialisatie proces.,Dus als u de waarde van een niet-statisch gegevenslid niet wilt opslaan, maak het dan tijdelijk.
4. Constructeur van object wordt nooit genoemd wanneer een object is gedeserialiseerd.
5. Geassocieerde objecten moeten Serialiseerbare interface implementeren.
voorbeeld:
class A implements Serializable{// B also implements Serializable// interface.B ob=new B(); }
SerialVersionUID
De serialisatie runtime associeert een versienummer met elke Serializeerbare Klasse, Een SerialVersionUID genaamd, die tijdens deserialisatie wordt gebruikt om te controleren of afzender en ontvanger van een serialized object klassen voor dat object geladen hebben die compatibel zijn met serialisatie., Als de ontvanger een klasse heeft geladen voor het object dat een andere UID heeft dan die van de corresponderende sender ‘ s klasse, zal de deserialisatie resulteren in een ongeldige class Exception. Een Serialiseerbare klasse kan zijn eigen UID expliciet declareren door een veldnaam te declareren.
Het moet statisch, definitief en van het type lang zijn.
i.,e-ANY-ACCESS-MODIFIER static final long serialVersionUID=42L;
als een serialiseerbare klasse niet expliciet een serialVersionUID declareert, dan zal de serialisatie runtime een standaard voor die klasse berekenen op basis van verschillende aspecten van de klasse, zoals beschreven in Java Object serialisatie specificatie. Het wordt echter sterk aanbevolen dat alle serialiseerbare klassen expliciet serialVersionUID waarde verklaren, omdat de berekening ervan zeer gevoelig is voor class details die kunnen variëren afhankelijk van compiler implementaties, elke verandering in klasse of het gebruik van een andere id kan de serialized gegevens beïnvloeden.,
Het wordt ook aanbevolen om private modifier te gebruiken voor UID omdat het niet nuttig is als overgenomen lid.
serialver
De serialver is een hulpmiddel dat wordt geleverd met JDK. Het wordt gebruikt om serialVersionUID nummer voor Java klassen te krijgen.,
U voert de volgende opdracht te krijgen serialVersionUID
serialver
Voorbeeld 1:
Output :
Object has been serializedObject has been deserialized a = 1b = geeksforgeeks
Voorbeeld 2:
Output:
Object has been serializedData before Deserialization.name = abage = 20a = 2b = 1000Object has been deserializedData after Deserialization.name = abage = 20a = 0b = 2000
Beschrijving voor de Uitgang:
Je hebt gezien tijdens de deserialisatie van het object de waarden van a en b is veranderd. De reden hiervoor was a van voorbijgaande aard en b was statisch.,
in het geval van transient variables:- een variabele gedefinieerd met transient keyword wordt niet geserialiseerd tijdens het serialisatieproces.Deze variabele zal worden geïnitialiseerd met de standaard waarde tijdens deserialisatie. (bijvoorbeeld: voor objecten is het null, voor Int is het 0).
in het geval van statische variabelen:- een variabele gedefinieerd met statisch trefwoord wordt niet geserialiseerd tijdens het serialisatieproces.Deze variabele zal worden geladen met de huidige waarde gedefinieerd in de klasse tijdens deserialisatie.
Dit artikel is geschreven door Mehak Narang en Shubham Juneja., Als je GeeksforGeeks leuk vindt en wil bijdragen, kun je ook een artikel schrijven met contribute.geeksforgeeks.org of mail uw artikel naar [email protected]. zie uw artikel verschijnen op de GeeksforGeeks hoofdpagina en help andere Geeks.
schrijf opmerkingen als u iets verkeerds vindt, of als u meer informatie wilt delen over het hierboven besproken onderwerp.
Attentie lezer! Stop nu niet met leren., Krijg greep van alle belangrijke Java Foundation en collecties concepten met de grondbeginselen van Java en Java Collections cursus tegen een student-vriendelijke prijs en industrie klaar.