La serializzazione è un processo di conversione di un oggetto in una sequenza di byte che può essere mantenuta su un disco o un database o può essere inviata tramite flussi. Il processo inverso di creazione dell’oggetto dalla sequenza di byte è chiamato deserializzazione.
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
ObjectOutputStream
Java Marker interface
Marker Interface è un’interfaccia in Java senza campo e metodo., L’interfaccia marker viene utilizzata per informare il compilatore che la classe che la implementa ha un comportamento o un significato speciale. Qualche esempio di interfaccia dei marcatori sono,
java.io.serializable
java.lang.Cloneable
java.rmi.Remote
java.util.RandomAccess
Tutte queste interfacce non hanno alcun metodo e di campo. Aggiungono solo un comportamento speciale alle classi che li implementano. Tuttavia le interfacce marker sono state deprecate da Java 5, sono state sostituite da Annotazioni., Le annotazioni vengono utilizzate al posto dell’interfaccia Marker che svolge esattamente lo stesso ruolo delle interfacce marker.
Per implementare la serializzazione e la deserializzazione, Java fornisce due classi ObjectOutputStream e ObjectInputStream.
ObjectOutputStream class
Viene utilizzato per scrivere gli stati dell’oggetto nel file. Un oggetto che implementa l’interfaccia java.io.Serializable può essere scritto su strams. Fornisce vari metodi per eseguire la serializzazione.
Classe ObjectInputStream
Un ObjectInputStream deserializza oggetti e dati primitivi scritti utilizzando un ObjectOutputStream.,
writeObject() e readObject() Metodi
IlwriteObject()
metodo diObjectOutputStream
classe serializza un oggetto e inviarlo al flusso di output.
public final void writeObject(object x) throws IOException
IlreadObject()
metodo diObjectInputStream
riferimenti di classe oggetto fuori flusso e deserializzarlo.
public final Object readObject() throws IOException,ClassNotFoundException
durante la serializzazione se non si desidera che alcun campo faccia parte dello stato dell’oggetto, dichiararlo statico o transitorio in base alle proprie esigenze e non verrà incluso durante il processo di serializzazione java.,
Esempio: Serializzazione di un oggetto in Java
In questo esempio, abbiamo una classe che implementa l’interfaccia serializzabile per rendere il suo oggetto serializzato.
L’oggetto della classe Studentinfo viene serializzato utilizzando il metodowriteObject()
e scritto nel filestudent.txt
.
Esempio : Deserializzazione dell’oggetto in Java
Per deserializzare l’oggetto, stiamo usando la classe ObjectInputStream che leggerà l’oggetto dal file specificato. Vedi l’esempio seguente.,
Abhi104null
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.
Parola chiave transient
Mentre serializziamo un oggetto, se non vogliamo che determinati membri dei dati dell’oggetto siano serializzati, possiamo menzionarlo transient. la parola chiave transitoria impedirà che il membro dei dati venga serializzato.,
class studentinfo implements Serializable { String name; transient int rid; static String contact;}
- Creare un membro dati
transient
ne impedirà la serializzazione. - In questo esempio
rid
non verrà serializzato perché è transitorio, econtact
rimarrà anche non serializzato perché è statico.