Wie kann man Daten serialisieren?
Das Problem besteht darin, dass z.B. Objekte wiederum Objekte
enthalten können, die mitgesichert werden müssen. Dies
erfolgt bei der Standardserialisierung in Byteform in einer
Datei, die üblicherweise die Dateiendung *.ser
besitzt.
import java.io.*;
import java.util.ArrayList;
public class ObjectSchreibenClass {
private static String datnam="myObjs.ser";
@SuppressWarnings("unchecked")
public static void main(String[] args) {
ArrayList<String> objArrList = null;
ObjectInputStream in = null;
try {
in = new ObjectInputStream(new FileInputStream(datnam));
objArrList = (ArrayList<String>) in.readObject();
} catch (FileNotFoundException ex) {
System.out.println("Speichersdatei (noch) nicht vorhanden!");
} catch (Exception ex) {
System.out.println(ex);
} finally {
try {
if(in != null) in.close();
} catch(IOException e) {}
}
if (objArrList == null)
objArrList = new ArrayList<String>();
objArrList.add(new String("ArrayListgroesse: " + objArrList.size()));
System.out.println(objArrList);
ObjectOutputStream aus = null;
try {
aus = new ObjectOutputStream(new FileOutputStream(datnam));
aus.writeObject(objArrList);
} catch (IOException ex) {
System.out.println(ex);
} finally {
try {
if(aus != null) {
aus.flush();
aus.close();
}
} catch(IOException e) {}
}
}
}
Im Zentrum der Serialisierung steht die Klasse ObjectOutputStream
mit ihrer Methode writeObject()
, die rekursiv die
vorhandenen Objektzustände durchläuft und sie an einen
FileOutputStream
weiterleitet.
Im Beispiel wird zunächst eine ArrayList-Variable mit null
initialisiert. Bei Existenz einer Speicherdatei wird die
ArrayList aus der angegebenen Datei mit den abgespeicherten
Objekten beladen. Bei Nichtexistenz einer Speicherdatei wird
eine neue, leere ArrayList instanziert. Zu den gespeicherten
Objekten der vorhandenen ArrayList werden in diesem Fall ein
String und die Größe der derzeitigen ArrayList
hinzugefügt.
Ein Beispiel für die Serialisierung eines eigenen Referenztyps findet sich unter Modifikatoren - transient