Come da Wikipedia, la serializzazione (o serializzazione) è il processo di traduzione di strutture di dati o di stato dell’oggetto in un formato che può essere memorizzato (ad esempio, in un file o buffer di memoria) o trasmesso (ad esempio, attraverso un collegamento di connessione di rete) e ricostruito in seguito (possibilmente in unQuando la serie risultante di bit viene riletta in base al formato di serializzazione, può essere utilizzata per creare un clone semanticamente identico dell’oggetto originale.,
quindi, fondamentalmente, la Serializzazione è un processo di conversione di un oggetto in una sequenza di byte che può essere mantenuta per un disco o di un database o possono essere inviati attraverso flussi. Il processo inverso di creazione dell’oggetto dalla sequenza di byte è chiamato deserializzazione.
Serializzazione e deserializzazione in java
Per serializzare e deserializzare il nostro oggetto in un file dobbiamo chiamareObjectOutputStream.writeObject()
eObjectInputStream.readObject()
.,
Una classe deve implementare l’interfaccia serializzabile presente nel pacchettojava.io
per serializzare correttamente il suo oggetto. Serializable è un’interfaccia marker che aggiunge un comportamento serializable alla classe che lo implementa.
Java fornisce Serializable API incapsulato sotto java.io
pacchetto per la serializzazione e la deserializzazione degli oggetti che includono,
java.io.serializable
java.io.Externalizable
ObjectInputStream
- e
ObjectOutputStream
etc.,
Punti da ricordare
1. Se una classe padre ha implementato un’interfaccia serializzabile, la classe figlio non ha bisogno di implementarla, ma viceversa non è vero.
2. Solo i membri di dati non statici vengono salvati tramite il processo di serializzazione.
3. I membri di dati statici e i membri di dati transitori non vengono salvati tramite serializzazione process.So, se non si desidera salvare il valore di un membro di dati non statico, renderlo transitorio.
4., Costruttore di oggetto non viene mai chiamato quando un oggetto è deserializzato.
5. Gli oggetti associati devono implementare un’interfaccia serializzabile.
SerialVersionUID
Il runtime di serializzazione associa un numero di versione a ciascuna classe Serializzabile chiamata SerialVersionUID, che viene utilizzato durante la deserializzazione per verificare che il mittente e il destinatario di un oggetto serializzato abbiano caricato classi per quell’oggetto compatibili rispetto alla serializzazione., Se il ricevitore ha caricato una classe per l’oggetto che ha un UID diverso da quello della classe del mittente corrispondente, la deserializzazione genererà una InvalidClassException. Una classe serializzabile può dichiarare il proprio UID esplicitamente dichiarando un nome di campo.
Deve essere statico, finale e di tipo long.
i.,e-ANY-ACCESS-MODIFIER static final long serialVersionUID=42L;
Se una classe serializable non dichiara esplicitamente un serialVersionUID, il runtime di serializzazione ne calcolerà uno predefinito per quella classe in base a vari aspetti della classe, come descritto nella specifica di serializzazione degli oggetti Java. Tuttavia, si raccomanda vivamente che tutte le classi serializable dichiarino esplicitamente il valore serialVersionUID, poiché il suo calcolo è altamente sensibile ai dettagli della classe che possono variare a seconda delle implementazioni del compilatore, qualsiasi modifica nella classe o utilizzo di id diversi può influenzare i dati serializzati.,
Si consiglia inoltre di utilizzare modificatore privato per UID poiché non è utile come membro ereditato.
In caso di variabili transitorie:- Una variabile definita con la parola chiave transient non viene serializzata durante il processo di serializzazione.Questa variabile verrà inizializzata con il valore predefinito durante la deserializzazione. (ad esempio: per gli oggetti è null, per int è 0).
In caso di variabili statiche:- Una variabile definita con la parola chiave static non viene serializzata durante il processo di serializzazione.Questa variabile verrà caricata con il valore corrente definito nella classe durante la deserializzazione.,
Serializzazione in java
Deserializzazione
Il campo di contatto è nullo perché è stato contrassegnato come statico e, come abbiamo discusso in precedenza, i campi statici non vengono serializzati.
NOTA: i membri statici non vengono mai serializzati perché sono collegati a class non object of class.
- La serializzazione è il processo di salvataggio dello stato di un oggetto in una sequenza di byte che possono essere memorizzati su un file o inviati in rete e la deserializzazione è il processo di ricostruzione di un oggetto da quei byte.,
- Solo le sottoclassi dell’interfaccia
Serializable
possono essere serializzate. - Se la nostra classe non implementa l’interfaccia
Serializable
o se ha un riferimento a una classe nonSerializable
, JVM lanceràNotSerializableException
. - Tutti i campi
transient
estatic
non vengono serializzati. - Il
serialVersionUID
viene utilizzato per verificare che gli oggetti serializzati e deserializzati abbiano gli stessi attributi e quindi siano compatibili con la deserializzazione., - Dovremmo creare un campo
serialVersionUID
nella nostra classe quindi se cambiamo la nostra struttura di classe (aggiungendo/rimuovendo campi) JVM non lo farà attraversoInvalidClassException
. Se non lo forniamo, JVM ne fornisce uno che potrebbe cambiare quando cambia la nostra struttura di classe. - Possiamo ignorare il comportamento di serializzazione predefinito all’interno della nostra classe Java fornendo l’implementazione dei metodi
writeObject
ereadObject
., - E possiamo chiamare
ObjectOutputStream.defaultWriteObject()
eObjectInputStream.defaultReadObject
dawriteObject
ereadObject
metodi per ottenere la logica di serializzazione e deserializzazione predefinita. - Possiamo lanciare
NotSerializableException
eccezione dawriteObject
ereadObject
, se non vogliamo che la nostra classe sia serializzata o deserializzata.
Leave a Reply