English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In Java, la serializzazione è un concetto attraverso il quale possiamo scrivere lo stato dell'oggetto in un flusso di byte, in modo da poterlo trasmettere attraverso la rete (utilizzando tecnologie come JPA e RMI).
Serializzazione dell'oggetto-
Assicurati che la classe implementi l'interfaccia Serializable.
Crea unFileOutputStreamOggetto che rappresenta il file in cui verrà memorizzato l'oggetto (path astratto).
Passando l'oggetto creato sopraFileOutputStreamOggetto per creare l'oggetto ObjectOutputStream.
Scrivi l'oggetto nel file utilizzando il metodo writeObject().
Deserializza l'oggetto
Crea unFileInputStreamOggetto, che rappresenta il file che contiene l'oggetto serializzato.
Leggi l'oggetto dal file utilizzando il metodo readObject().
Utilizzare l'oggetto recuperato.
Quando deserializziamo solo un oggetto, le variabili di istanza verranno salvate e avranno lo stesso valore dopo il processo.
Variabile transitoria - Non verrà mai consideratoVariabile transitoriaIl valore (escludendolo dal processo di serializzazione). Ad esempio, quando dichiariamo una variabile transitoria, dopo la deserializzazione, il suo valore sarà sempre null, false o zero (valore predefinito).
Variabili statiche - Non verranno mantenute durante il processo di deserializzazione.Variabili statichedei valori. Di fatto, le variabili statiche non vengono serializzate, ma poiché appartengono alla classe. Dopo la deserializzazione, prendono il valore attuale dalla classe.
In questo programma, abbiamo cambiato i valori dell'istanza, le variabili statiche e transient della classe prima della deserializzazione.
Dopo questo processo, i valori delle variabili d'istanza saranno gli stessi. Le variabili temporanee mostrano i valori di default, mentre le variabili statiche mostrano i nuovi (attuali) valori della classe.
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; class Student implements Serializable{ private String name; private transient int age; private static int year = 2018; public Student(){ System.out.println("This is a constructor"); this.name = "Krishna"; this.age = 25; } public Student(String name, int age){ this.name = name; this.age = age; } public void display() { System.out.println("Name: " + this.name); System.out.println("Age: " + this.age); System.out.println("Year: " + Student.year); } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public void setYear(int year) { Student.year = year; } } public class SerializeExample{ public static void main(String args[]) throws Exception{ //Creazione di un oggetto Student Student std = new Student("Vani", 27); //Serializzazione dell'oggetto FileOutputStream fos = new FileOutputStream("e:\\student.ser"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(std); oos.close(); fos.close(); //Stampa dei dati prima della de-serializzazione System.out.println("Valore prima del de-serializzazione: "); std.display(); //Modifica del valore della variabile statica std.setYear(2019); //Modifica del valore della variabile istanziata std.setName("Varada"); //Modifica del valore della variabile transitoria std.setAge(19); System.out.println("Oggetto serializzato……"); //De-serializzazione dell'oggetto FileInputStream fis = new FileInputStream("e:\\student.ser"); ObjectInputStream ois = new ObjectInputStream(fis); Student deSerializedStd = (Student) ois.readObject(); System.out.println("Oggetto de-serializzato……"); ois.close(); fis.close(); System.out.println("Valore de-serializzato: "); deSerializedStd.display(); } }
Risultato dell'output
Valore prima del de-serializzazione: Nome: Vani Età: 27 Anno: 2018 Oggetto serializzato…… Oggetto de-serializzato…… Valore de-serializzato: Nome: Vani Età: 0 Anno: 2019