Wie kann man Daten serialisieren?

Unter dem Begriff 'serialisieren' versteht man das Speichern von Objektstrukturen und Variablenbelegungen über die Laufzeit der Applikation hinaus. Sie können hierdurch z.B. auch in Netzwerken verfügbar gemacht werden. Mit Hilfe eines ObjectInputStream und ObjectOutputStream können diese persistent gemacht, d.h. in einer Datei gespeichert werden.

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