Grundlagen der Java-Serialisierung
Implementieren Sie Serializable, schreiben Sie Objekte mit ObjectOutputStream in Streams und lesen Sie sie wieder ein.
Grundlagen der Java-Serialisierung ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist Java-Serialisierung?
Bei der Serialisierung wird der Zustand eines Objekts in einen Bytestrom umgewandelt, damit er auf der Festplatte gespeichert, über ein Netzwerk gesendet oder in einer Datenbank abgelegt werden kann. Die Deserialisierung kehrt diesen Vorgang um.
Die Serializable-Markierungsschnittstelle
Um eine Klasse zu serialisieren, implementieren Sie java.io.Serializable. Die Schnittstelle enthält keine Methoden — sie signalisiert der JVM, dass Instanzen dieser Klasse serialisiert werden können.
import java.io.Serializable;
public class User implements Serializable {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
@Override public String toString() { return name + " / " + age; }
}Ein Objekt mit ObjectOutputStream schreiben
Betten Sie einen FileOutputStream in einen ObjectOutputStream ein und rufen Sie writeObject() auf, um das Objekt zu serialisieren.
import java.io.*;
try (ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("user.ser"))) {
oos.writeObject(new User("Alice", 30));
System.out.println("Serialized successfully");
}Ein Objekt mit ObjectInputStream lesen
Betten Sie einen FileInputStream in einen ObjectInputStream ein und rufen Sie readObject() auf, um das Objekt zu deserialisieren. Wandeln Sie das Ergebnis in den erwarteten Typ um.
import java.io.*;
try (ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("user.ser"))) {
User u = (User) ois.readObject();
System.out.println("Deserialized: " + u);
}Serialisieren eines Objektgraphen
Alle Objekte, auf die vom serialisierten Objekt aus verwiesen wird, müssen ebenfalls Serializable implementieren; andernfalls wird zur Laufzeit eine NotSerializableException ausgelöst.
public class Order implements Serializable {
private User customer; // User must be Serializable
private List<String> items;
public Order(User customer, List<String> items) {
this.customer = customer;
this.items = items;
}
}NotSerializableException
Wenn ein Feld im Objektgraphen nicht serialisierbar und nicht als transient markiert ist, löst Java beim Schreiben eine NotSerializableException aus.
// Thread is NOT Serializable
public class Task implements Serializable {
private Thread worker; // throws NotSerializableException!
// Fix: mark as transient
private transient Thread worker2;
}Objektgraph und gemeinsame Referenzen
Java verfolgt während der Serialisierung die Objektidentität. Wenn zwei Felder auf dasselbe Objekt verweisen, wird nur eine Kopie geschrieben, und beide Felder verweisen auf dieselbe deserialisierte Instanz.
Collections serialisieren
Standard-Collections wie ArrayList, HashMap und LinkedList implementieren bereits Serializable und werden daher serialisiert, solange dies auch für ihre Elemente gilt.
List<String> names = new ArrayList<>(List.of("Alice", "Bob"));
try (ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("names.ser"))) {
oos.writeObject(names);
}Vererbung und Serialisierung
Wenn eine Oberklasse Serializable ist, sind auch alle Unterklassen serialisierbar. Wenn die Oberklasse NICHT serialisierbar ist, werden ihre Felder nicht gespeichert; für die Deserialisierung muss die Oberklasse einen parameterlosen Konstruktor besitzen.
Bytestrom überprüfen
Der serialisierte Bytestrom beginnt mit den Magic-Bytes 0xACED 0x0005. Sie können ihn mit einem Hex-Editor untersuchen oder mit SerialVer-Tools dekodieren, um das Format zu verstehen.
Sicherheitshinweis
Die Java-Deserialisierung ist ein bekannter Angriffsvektor. Deserialisieren Sie niemals Daten aus nicht vertrauenswürdigen Quellen ohne Validierung. Bevorzugen Sie für externe Daten JSON, Protobuf oder signierte Datenpakete.
Kurze Überprüfung
Welche Methode serialisiert ein Objekt in einen Stream?
Zusammenfassung
Die Java-Serialisierung verwendet ObjectOutputStream und ObjectInputStream. Klassen müssen Serializable implementieren. Vermeiden Sie die Serialisierung nicht vertrauenswürdiger Daten – bevorzugen Sie für neuen Code moderne Alternativen.
Häufig gestellte Fragen
Ist die Lektion „Grundlagen der Java-Serialisierung“ kostenlos?
Ja — der vollständige Text von „Grundlagen der Java-Serialisierung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Grundlagen der Java-Serialisierung“?
Implementieren Sie Serializable, schreiben Sie Objekte mit ObjectOutputStream in Streams und lesen Sie sie wieder ein. Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Java Academy zu starten?
Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Grundlagen der Java-Serialisierung“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?
Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Grundlagen der Java-Serialisierung
- transient-Felder und serialVersionUID
- Benutzerdefinierte Serialisierung: writeObject und readObject
- Moderne Alternativen: JSON und Protocol Buffers