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-
Assicurarsi che la classe implementi l'interfaccia Serializable.
Creare unFileOutputStreamOggetto che rappresenta il file in cui verrà memorizzato l'oggetto (percorso astratto).
Tramite la trasmissione delFileOutputStreamOggetto per creare un ObjectOutputStream.
Utilizzare il metodo writeObject() per scrivere un oggetto nel file.
Deserializzare l'oggetto
Creare unFileInputStreamOggetto che rappresenta il file che contiene l'oggetto serializzato.
Utilizzare il metodo readObject() per leggere un oggetto dal file.
Utilizzare l'oggetto recuperato.
ACostruzione È un metodo simile e viene chiamato quando si crea un oggetto della classe. Solitamente viene utilizzato per inizializzare le variabili di unaistanza di una classe. Il costruttore ha lo stesso nome della classe e non ha un tipo di ritorno.
Se non viene fornito un costruttore, il compilatore definisce automaticamente un costruttore per voi, che inizializzerà le variabili d'istanza con valori predefiniti.
Quando deserializziamo un oggetto, mai chiamiamo il costruttore della sua classe. Consideriamo l'esempio seguente, qui c'è una classe chiamata Student con due variabili d'istanza e un costruttore predefinito (inizializzato con due valori hardcodati) e un costruttore parametrizzato.
Il metodo display() di questa classe mostra i valori delle variabili dell'istanza corrente.
Creiamo un oggetto della classe Student passando due valori (vani e 27) e serializzandoli.
Quando deserializziamo questo oggetto e chiamiamo il metodo display(), verranno stampati i valori che abbiamo trasmesso. Le variabili statiche stamperanno il nuovo (corrente) valore 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{ //Crea 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 deserializzazione System.out.println("Valore prima della deserializzazione"); 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 transitiva std.setAge(19); System.out.println("Oggetto serializzato......"); //Deserializzazione 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 deserializzato"); deSerializedStd.display(); } }
Risultato di output
Valore prima della deserializzazione Nome: Vani Età: 27 Anno: 2018 Oggetto serializzato...... Oggetto de-serializzato...... Valore deserializzato Nome: Vani Età: 0 Anno: 2019