So lesen und schreiben Sie ein Java-Objekt in eine Datei

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 KlassePersonals 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