Kuten kohti Wikipedia, serialization (tai serialisation) on prosessi kääntää tietorakenteita tai esine valtion muotoon, joka voidaan tallentaa (esimerkiksi tiedoston tai memory buffer) tai siirtää (esimerkiksi, eri verkko-yhteys linkki) ja rekonstruoitu myöhemmin (mahdollisesti eri tietokone ympäristö).Kun tuloksena sarja bits on kertausta mukaan serialization muodossa, sitä voidaan käyttää luoda semanttisesti identtinen klooni alkuperäisen objektin.,
joten periaatteessa Serialization on prosessi muuntaa objektin tavujen sekvenssi, joka voi olla jatkunut levylle tai tietokantaan tai voidaan lähettää kautta puroihin. Käänteistä prosessia, jossa objekti luodaan tavujen sekvenssistä, kutsutaan deserialisaatioksi.
Serialization ja Deserialization java
sarjoittaa ja deserialize meidän kohteen tiedosto, meidän täytyy soittaa ObjectOutputStream.writeObject()
ja ObjectInputStream.readObject()
.,
– luokan tulee toteuttaa Serializable käyttöliittymä läsnä java.io
paketti jotta voidaan sarjoittaa sen objektin onnistuneesti. Serializable on merkkiliittymä, joka lisää serializable käyttäytymistä luokan toteuttaa sitä.
Java Serializable API kapseloitu alle java.io
paketti serializing ja android esineitä, jotka sisältävät,
java.io.serializable
java.io.Externalizable
ObjectInputStream
- ja
ObjectOutputStream
jne.,
Pistettä muistaa
1. Jos vanhemman luokan on toteuttaa Serializable-rajapinta sitten lapsi luokan ei tarvitse toteuttaa sitä, mutta päinvastoin, ei ole totta.
2. Vain ei-staattiset datan jäsenet tallennetaan Serialisointiprosessin kautta.
3. Staattisen tiedon jäseniä ja ohimeneviä tietoja ei tallenneta Sarjallistamisen kautta process.So, jos et halua tallentaa arvoa ei-staattinen data jäsen sitten tehdä se ohimenevä.
4., Objektin konstruktoria ei koskaan kutsuta, kun esine on deserialisoitu.
5. Liitännäisobjekteilla on oltava sarjamuotoinen käyttöliittymä.
SerialVersionUID
Serialization runtime associates version numero jokaisen Serializable luokka kutsutaan SerialVersionUID, jota käytetään aikana Deserialization tarkistaa, että lähettäjän ja vastaanottajan on sarjoittaa objekti on ladattu luokat, että esine, joka on yhteensopiva suhteen serialization., Jos vastaanotin on ladattu luokan objektin, joka on eri UID kuin vastaava lähettäjän luokka, Deserialization johtaa InvalidClassException. Sarjamuotoinen luokka voi julistaa oman UID: nsä yksiselitteisesti ilmoittamalla kenttänimen.
sen on oltava staattinen, lopullinen ja tyypiltään pitkä.
i.,e – TAHANSA-PÄÄSY-NÄPPÄINTÄ staattinen lopullinen pitkä serialVersionUID=42L;
Jos serializable luokka ei nimenomaisesti julistaa serialVersionUID, sitten serialization runtime laskee oletuksena yksi, että luokka perustuu eri osa-luokassa, kuten on kuvattu Java Object Serialization Erittely. Kuitenkin se on erittäin suositeltavaa, että kaikki serializable-luokat nimenomaisesti julistaa serialVersionUID arvo, koska sen laskenta on erittäin herkkä luokan tiedot, jotka voivat vaihdella riippuen compiler toteutukset, mitään muutosta luokka-tai käyttämällä eri tunnus voi vaikuttaa sarjatiedot.,
on myös suositeltavaa käyttää yksityistä modifieria UID-hoitoon, koska siitä ei ole hyötyä periytyvänä jäsenenä.
tapauksessa ohimenevä muuttujat:- muuttuja määritellään ohimenevä avainsana ei ole sarjoitettu aikana serialization prosessi.Tämä muuttuja alustetaan oletusarvolla deserialisaation aikana. (esim.esineille se on nolla, int se on 0).
staattisten muuttujien tapauksessa: – muuttuja, joka on määritelty staattisella avainsanalla, ei serialisoidu serialisaatioprosessin aikana.Tämä muuttuja Ladataan luokassa määritellyllä nykyarvolla deserialisaation aikana.,
Serialization java
Deserialization
ota Yhteyttä-kenttä on null,koska se oli merkitty staattinen ja kuten olemme keskustelleet aiemmin staattiset kentät ei saa sarjoittaa.
huomaa: staattisia jäseniä ei koskaan serialisoida, koska ne on kytketty luokkaan, joka ei ole luokan objekti.
- Serialization on prosessi säästää esine on valtion tavujen sekvenssi, joka sitten voidaan tallentaa tiedostoon tai lähettää verkon yli ja deserialization on prosessi jälleenrakennus objektin niitä tavua.,
- Vain alaluokkien
Serializable
käyttöliittymä voidaan sarjoittaa. - Jos meidän luokka ei toteuta
Serializable
interface tai, jos se on ottaa viittaus eiSerializable
luokka sitten JVM heittääNotSerializableException
. - Kaikki
transient
jastatic
kentät eivät saa sarjoittaa. -
serialVersionUID
käytetään tarkistaa, että sarjoitettu ja deserialized esineitä on samoja ominaisuuksia ja ovat siten yhteensopivia deserialization., - Meidän pitäisi luoda
serialVersionUID
kenttä meidän luokan, joten jos haluamme muuttaa meidän luokan rakenne (lisäämällä/poistamalla kenttiä) JVM ei läpiInvalidClassException
. Jos emme anna sitä JVM tarjoaa sellainen, joka voi muuttua, kun luokkarakenne muuttuu. - Emme voi ohittaa oletuksena serialization käyttäytyminen sisällä Java-luokan tarjoamalla täytäntöönpanon
writeObject
jareadObject
menetelmiä., - Ja voimme kutsua
ObjectOutputStream.defaultWriteObject()
jaObjectInputStream.defaultReadObject
alkaenwriteObject
jareadObject
menetelmiä saada default serialization ja deserialization logiikkaa. - Voimme heittää
NotSerializableException
poikkeuswriteObject
jareadObject
, jos emme halua, että meidän luokka on sarjoittaa tai deserialized.
Leave a Reply