Java ObjectOutputStream meistern: Serialisierung, Methoden und praktische Beispiele
Java ObjectOutputStream Klasse
Erkunden Sie die Java ObjectOutputStream API, ihre Kernmethoden und Schritt-für-Schritt-Beispiele, die demonstrieren, wie man Objekte in Dateien serialisiert und zurückliest.
Die ObjectOutputStream Klasse aus dem java.io Paket ermöglicht es Ihnen, Java-Objekte so zu schreiben, dass sie später von ObjectInputStream gelesen werden können. Sie erweitert OutputStream und ist das Rückgrat von Javas eingebautem Serialisierungsmechanismus.
Wie ObjectOutputStream funktioniert
Wenn Sie ein Objekt in einen ObjectOutputStream schreiben, kodiert das Framework den Klassennamen, Feldwerte und Typinformationen des Objekts in ein binäres Format – ein Prozess, der als Serialisierung bekannt ist. Der resultierende Byte-Stream kann in einer Datei gespeichert, über ein Netzwerk übertragen oder sogar im Speicher eingebettet werden.
Wichtig: Nur Objekte, die java.io.Serializable implementieren, können serialisiert werden. Dieses Interface fungiert als Marker, um der Laufzeit mitzuteilen, dass ein Objekt sicher persistiert oder übertragen werden kann.
ObjectOutputStream erstellen
Beginnen Sie mit dem Import der Klasse:
import java.io.ObjectOutputStream;
Verknüpfen Sie es dann mit einem FileOutputStream oder einem anderen zugrundeliegenden OutputStream:
// In Datei "data.bin" schreiben
FileOutputStream fileStream = new FileOutputStream("data.bin");
ObjectOutputStream objStream = new ObjectOutputStream(fileStream);
Hier ist objStream nun bereit, Objekte in fileStream zu serialisieren.
Wichtige Methoden von ObjectOutputStream
Die Klasse erbt eine Suite von Methoden von OutputStream und fügt spezialisierte für Objekt-Handling hinzu:
write(int b)– schreibt ein einzelnes Byte.writeBoolean(boolean v)– schreibt einen Boolean-Wert.writeChar(int v)– schreibt ein Character.writeInt(int v)– schreibt einen Integer.writeObject(Object obj)– serialisiert das gegebene Objekt.
Beispiel 1: Serialisierung von Primitiven und String-Daten
Unten ist ein vollständiges Snippet, das einen int und einen String in eine Datei schreibt und sie dann mit ObjectInputStream zurückliest:
import java.io.*;
public class Main {
public static void main(String[] args) {
int data1 = 5;
String data2 = "This is programiz";
try {
// Objekte schreiben
FileOutputStream fos = new FileOutputStream("file.bin");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(data1);
oos.writeObject(data2);
oos.close();
// Objekte lesen
FileInputStream fis = new FileInputStream("file.bin");
ObjectInputStream ois = new ObjectInputStream(fis);
System.out.println("Integer data :" + ois.readInt());
System.out.println("String data :" + ois.readObject());
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Ausgabe
Integer data :5 String data :This is programiz
Beispiel 2: Serialisierung eines benutzerdefinierten Objekts
Um eine benutzerdefinierte Klasse zu serialisieren, implementieren Sie einfach Serializable:
import java.io.*;
class Dog implements Serializable {
String name;
String breed;
Dog(String name, String breed) {
this.name = name;
this.breed = breed;
}
}
public class Main {
public static void main(String[] args) {
Dog dog1 = new Dog("Tyson", "Labrador");
try {
// Objekt schreiben
FileOutputStream fos = new FileOutputStream("dog.bin");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(dog1);
oos.close();
// Objekt lesen
FileInputStream fis = new FileInputStream("dog.bin");
ObjectInputStream ois = new ObjectInputStream(fis);
Dog newDog = (Dog) ois.readObject();
System.out.println("Dog Name: " + newDog.name);
System.out.println("Dog Breed: " + newDog.breed);
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Ausgabe
Dog Name: Tyson Dog Breed: Labrador
Die Dog Klasse muss Serializable implementieren, da ObjectOutputStream nur serialisierbare Objekte schreiben kann.
Weitere ObjectOutputStream Operationen
| Methode | Beschreibung |
|---|---|
flush() | Leert alle gepufferten Ausgabebytes in den zugrundeliegenden Stream. |
drain() | Leert gepufferte Daten (verfügbar ab Java 9+). |
close() | Schließt den Stream und gibt alle Systemressourcen frei. |
Für einen tieferen Einblick konsultieren Sie die offizielle Java-Dokumentation.
Java
- Javas final-Schlüsselwort verstehen: Variablen, Methoden und Klassen
- Java instanceof-Operator: Ein umfassender Leitfaden
- Java-Vererbung meistern: Konzepte, Typen und praktische Beispiele
- Java statische verschachtelte Klassen verstehen: Nutzung, Unterschiede und Beispiele
- Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
- Java Singleton-Pattern erklärt: Sichere Implementierung und Verwendung
- Java Reflection meistern: Klassen, Methoden und Felder zur Laufzeit inspizieren
- Java ArrayList meistern: Operationen, Methoden und Best Practices
- Java Generics meistern – Wiederverwendbaren, typsicheren Code erstellen
- Java-Dateioperationen mit java.io meistern – Erstellen, Lesen, Schreiben & Löschen