Quando si usa la serializzazione si fa uso di due classi:
- ObjectOutputStream: che permette di scrivere su di un file.
- ObjectInputStream: che permette di leggere dal file
Tramite queste due classi è possibile salvare su di un file una classe, che implementi l'interfaccia Serializable. In questo modo nel file viene salvato il Byte Code relativo alla classe, in modo che possa, poi, essere recuperato mediante l'uso di un oggetto ObjectInputStream.
Ti faccio un esempio, così ti risulterà più chiaro:
codice:
import java.io.*;
class MioOggetto implements Serializable {
private String dsc;
private int valore;
public MioOggetto() {
dsc = "";
valore = 0;
}
public void setDsc(String dsc) { this.dsc = dsc; }
public void setValore(int valore) { this.valore = valore; }
public String getDsc() { return dsc; }
public int getValore() { return valore; }
}
class ProvaSalva {
public static void main(String [] args) {
OutputStream fileOut = new FileOutputStream("file.dat");
ObjectOutputStream oos = new ObjectOutputStream(fileOut);
MioOggetto oggetto = new MioOggetto();
oggetto.setDsc("Descrizione");
oggetto.setValore(10);
oos.writeObject(oggetto); // Salvo un oggetto sul file
}
}
class ProvaApri {
public static void main(String [] args) {
InputStream fileIn = new FileInputStream("file.dat");
ObjectInputStream ois = new ObjectInputStream(fileIn);
// Leggo l'oggetto salvato precedentemente.
// Serve un cast perchè readObject() restituisce un oggetto di tipo Object
MioOggetto obj = ((MioOggetto) ois.readObject());
}
}
Spero di averti spiegato sufficientemente bene come si usa la serializzazione. Nota che non è necessario salvare tutte le proprietà di un oggetto: io salvo una classe e leggo una classe.
Un'ultima osservazione. Se un oggetto eredita da una classe che implementa Serializable, dall'eseritarietà derica che anch'esso è Serializable; mentre per gli oggetti contenuti (Oggetti, non dati di tipo primitivo) non è valida la stessa cosa: questo significa che se voglio salvare un oggetto che contiene altri oggetti, anche questi oggetti interni DEVONO implementare Serializable.
Ciao.