Как читать и записывать Java-объект в файл

Как читать и записывать объект Java в файл

Объект JavaSerialization - это API, предоставляемый стеком библиотеки Java как средство сериализации объектов Java. Сериализация - это процесс преобразования объектов в поток байтов, доступный для записи. После преобразования в байтовый поток эти объекты могут быть записаны в файл. Обратный процесс называется десериализацией.

Объект Java является сериализуемым, если его класс или любой из его суперклассов реализуют либо интерфейсjava.io.Serializable, либо его подынтерфейс,java.io.Externalizable.

1. Java объект

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. Написание и чтение объектов на Java

Объекты могут быть преобразованы в байтовый поток с помощьюjava.io.ObjectOutputStream. Чтобы разрешить запись объектов в файл с помощьюObjectOutputStream, необходимо, чтобы соответствующий класс реализовал интерфейсSerializable, как показано в определении класса ниже.

Чтение объектов в Java похоже на запись объекта с использованиемObjectOutputStreamObjectInputStream. Ниже приведен пример полного цикла написания объектов и чтения объектов на Java.

При чтении объектовObjectInputStream напрямую пытается отобразить все атрибуты в класс, в который мы пытаемся привести объект чтения. Если не удается точно сопоставить соответствующий объект, возникает исключениеClassNotFound.

Давайте теперь поймем процесс написания и чтения на примере. Мы используем классPerson, показанный выше, как объект.

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();
        }

    }

}

Выполнив приведенный выше код, мы получим вывод ниже:

Name:John
Age: 30
Gender: Male
Name:Rachel
Age: 25
Gender: Female