magicmarcy.de | Serialisierung in Java

Serialisierung in Java

2. Oktober 2025 - Lesezeit: 3 Minuten

Wenn du schon eine Weile mit Java arbeitest, bist du sicher auf den Begriff Serialisierung gestoßen. Aber was bedeutet das eigentlich? Und warum sollte man es brauchen?

In diesem Beitrag erkläre ich dir Schritt für Schritt, was Serialisierung ist, wofür man sie verwendet, und zeige dir ein paar praxisnahe Beispiele.

 

Was ist Serialisierung?

Stell dir vor, du hast ein Java-Objekt – zum Beispiel ein Benutzerprofil mit Namen und Alter.
Normalerweise existiert dieses Objekt nur während dein Programm läuft. Sobald du das Programm beendest, ist das Objekt weg.

 

Serialisierung bedeutet:

  • Wir wandeln ein Objekt in eine Folge von Bytes um (eine Art Datenstrom).
  • Diese Bytes können wir dann z. B. in einer Datei speichern oder über das Netzwerk verschicken.
  • Später können wir das Objekt mit Deserialisierung wieder zurück in seine ursprüngliche Form bringen.

 Java hat dafür ein eingebautes Interface: Serializable.

 

Wozu braucht man Serialisierung?

Hier ein paar typische Anwendungsfälle:

  • Speichern von Objekten in Dateien oder Datenbanken
  • Übertragen von Objekten übers Netzwerk (z. B. Client ↔ Server)
  • Caching: Datenstrukturen zwischenspeichern, damit man sie später wiederverwenden kann

 

Ein einfaches Beispiel

Wir erstellen eine Klasse Benutzer, die wir serialisieren möchten:

import java.io.Serializable;

public class Benutzer implements Serializable {

    private static final long serialVersionUID = 1L;

    private String name;
    private int alter;

    public Benutzer(String name, int alter) {
        this.name = name;
        this.alter = alter;
    }

    public String getName() {
        return name;
    }

    public int getAlter() {
        return alter;
    }

    @Override
    public String toString() {
        return "Benutzer{name='" + name + "', alter=" + alter + "}";
    }
}

Wichtige Punkte:

  • Die Klasse implementiert Serializable.
  • Das Feld serialVersionUID ist eine eindeutige Kennung der Klasse.

 

Damit stellt Java sicher, dass beim Deserialisieren die Version der Klasse passt.

Du solltest diesen Wert immer selbst setzen, sonst erzeugt Java automatisch einen – und das kann später Probleme bereiten, wenn du die Klasse veränderst.

 

Objekt in eine Datei schreiben (Serialisierung)

Nun serialisieren wir ein Objekt der Klasse Benutzer und speichern es in einer Datei:

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class SerialisierenDemo {

    public static void main(String[] args) {

        Benutzer benutzer = new Benutzer("Max Mustermann", 25);

        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("benutzer.dat"))) {
            oos.writeObject(benutzer);
            System.out.println("Benutzer wurde serialisiert und gespeichert!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Nach der Ausführung findest du die Datei benutzer.dat, in der dein Objekt gespeichert ist (in binärer Form).

 

Objekt wieder einlesen (Deserialisierung)

Jetzt wollen wir das gespeicherte Objekt wieder zurückholen:

import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class DeserialisierenDemo {

    public static void main(String[] args) {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("benutzer.dat"))) {
            Benutzer benutzer = (Benutzer) ois.readObject();
            System.out.println("Benutzer wurde geladen: " + benutzer);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Ausgabe:

Benutzer wurde geladen: Benutzer{name='Max Mustermann', alter=25}

 

Das transient Schlüsselwort

Manchmal möchte man nicht alle Felder eines Objekts speichern.

Zum Beispiel ein Passwort.

Mit dem Schlüsselwort transient kannst du Felder von der Serialisierung ausschließen:

public class Benutzer implements Serializable {

    private static final long serialVersionUID = 1L;

    private String name;
    private int alter;

    private transient String passwort; // wird NICHT serialisiert

    public Benutzer(String name, int alter, String passwort) {
        this.name = name;
        this.alter = alter;
        this.passwort = passwort;
    }

    @Override
    public String toString() {
        return "Benutzer{name='" + name + "', alter=" + alter + "', passwort='" + passwort + "'}";
    }
}

Wenn du nun ein Benutzer-Objekt speicherst und wieder einliest, ist das Passwort-Feld null, weil es nicht serialisiert wurde.

 

Fazit

Serialisierung macht es möglich, Objekte dauerhaft zu speichern oder über Netzwerke zu übertragen.

Dafür genügt es, Serializable zu implementieren und mit der serialVersionUID stellst du sicher, dass deine Klassenversion konsistent bleibt. Mit transient kannst du sensible oder unnötige Daten von der Speicherung ausschließen.

Für Einsteiger ist es am wichtigsten zu verstehen: Serialisierung ist wie ein "Foto" deines Objekts, das du später wiederherstellen kannst.

Es wurden noch keine Kommentare verfasst, sei der erste!

Support

Wenn du mich und meine Arbeit unterstützen möchtest, freue ich mich sehr über eine kleine Aufmerksamkeit in Form eines Kaffees ;-)



Weitere Informationen, wie du mich und meine Arbeit unterstützen kannst, findest du hier.