So lesen und schreiben Sie ein Java-Objekt in eine Datei
Das Java-ObjektSerialization ist eine API, die vom Java Library Stack als Mittel zum Serialisieren von Java-Objekten bereitgestellt wird. Serialisierung ist ein Prozess zum Konvertieren von Objekten in einen beschreibbaren Bytestrom. Nach der Konvertierung in einen Byte-Stream können diese Objekte in eine Datei geschrieben werden. Der umgekehrte Vorgang wird als Deserialisierung bezeichnet.
Ein Java-Objekt ist serialisierbar, wenn seine Klasse oder eine seiner Oberklassen entweder diejava.io.Serializable
-Schnittstelle oder die Unterschnittstellejava.io.Externalizable
implementiert.
1. Java-Objekt
Person.java
package com.example; import java.io.Serializable; public class Person implements Serializable { private static final long serialVersionUID = 1L; private String name; private int age; private String gender; Person() { }; Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Name:" + name + "\nAge: " + age + "\nGender: " + gender; } }
2. Objekte in Java schreiben und lesen
Die Objekte können mitjava.io.ObjectOutputStream
in Byte-Stream konvertiert werden. Um das Schreiben von Objekten in eine Datei mitObjectOutputStream
zu ermöglichen, muss die betreffende Klasse dieSerializable
-Schnittstelle implementieren, wie in der folgenden Klassendefinition gezeigt.
Das Lesen von Objekten in Java ähnelt dem Schreiben von Objekten mitObjectOutputStreamObjectInputStream
. Das folgende Beispiel zeigt den vollständigen Zyklus des Schreibens und Lesens von Objekten in Java.
Beim Lesen von Objekten versuchtObjectInputStream
direkt, alle Attribute der Klasse zuzuordnen, in die wir das gelesene Objekt umwandeln möchten. Wenn das jeweilige Objekt nicht genau zugeordnet werden kann, wird eineClassNotFound
-Ausnahme ausgelöst.
Lassen Sie uns nun den Schreib- und Leseprozess anhand eines Beispiels verstehen. Wir verwenden die oben gezeigte KlassePerson
als Objekt.
WriterReader.java
package com.example; package com.example; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class WriterReader { public static void main(String[] args) { Person p1 = new Person("John", 30, "Male"); Person p2 = new Person("Rachel", 25, "Female"); try { FileOutputStream f = new FileOutputStream(new File("myObjects.txt")); ObjectOutputStream o = new ObjectOutputStream(f); // Write objects to file o.writeObject(p1); o.writeObject(p2); o.close(); f.close(); FileInputStream fi = new FileInputStream(new File("myObjects.txt")); ObjectInputStream oi = new ObjectInputStream(fi); // Read objects Person pr1 = (Person) oi.readObject(); Person pr2 = (Person) oi.readObject(); System.out.println(pr1.toString()); System.out.println(pr2.toString()); oi.close(); fi.close(); } catch (FileNotFoundException e) { System.out.println("File not found"); } catch (IOException e) { System.out.println("Error initializing stream"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Bei der Ausführung des obigen Codes erhalten wir folgende Ausgabe:
Name:John Age: 30 Gender: Male Name:Rachel Age: 25 Gender: Female