返回

Java对象持久化追加并读取方案详述

后端

简介

Java对象持久化到文件,是指将Java对象的状态存储到文件中,以便以后可以重建该对象。这样,就可以在程序运行时将对象的状态保存到文件中,并在程序下次启动时从文件中恢复对象的状态。

Java对象持久化到文件中,可以选择追加JSON保存或序列化保存。两种方式各有优缺点。

JSON追加保存

JSON追加保存,是指将Java对象转换为JSON字符串,然后追加到文件中。这种方式的优点是简单易行,不需要额外的库支持。缺点是文件大小可能会比较大,而且读取数据时需要将整个文件加载到内存中。

序列化保存

序列化保存,是指将Java对象直接写入到文件中。这种方式的优点是文件大小较小,而且读取数据时只需要加载文件中的部分数据。缺点是需要额外的库支持,而且对象必须是可序列化的。

性能比较

在性能方面,序列化保存要优于JSON追加保存。因为序列化保存不需要将整个文件加载到内存中,只需要加载文件中的部分数据。

代码示例

JSON追加保存

import com.google.gson.Gson;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class JsonAppendSave {

  public static void main(String[] args) throws IOException {
    // 创建一个对象列表
    List<Person> persons = new ArrayList<>();
    persons.add(new Person("张三", 20));
    persons.add(new Person("李四", 30));

    // 将对象列表转换为JSON字符串
    Gson gson = new Gson();
    String json = gson.toJson(persons);

    // 追加JSON字符串到文件中
    FileWriter writer = new FileWriter("persons.json", true);
    writer.write(json);
    writer.close();
  }
}

class Person {

  private String name;
  private int age;

  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }
}

序列化保存

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

public class SerializationSave {

  public static void main(String[] args) throws IOException, ClassNotFoundException {
    // 创建一个对象列表
    List<Person> persons = new ArrayList<>();
    persons.add(new Person("张三", 20));
    persons.add(new Person("李四", 30));

    // 将对象列表序列化到文件中
    FileOutputStream fos = new FileOutputStream("persons.ser");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(persons);
    oos.close();

    // 从文件中反序列化对象列表
    FileInputStream fis = new FileInputStream("persons.ser");
    ObjectInputStream ois = new ObjectInputStream(fis);
    List<Person> persons2 = (List<Person>) ois.readObject();
    ois.close();

    // 打印对象列表
    for (Person person : persons2) {
      System.out.println(person.getName() + " " + person.getAge());
    }
  }
}

class Person implements java.io.Serializable {

  private String name;
  private int age;

  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }
}

总结

Java对象持久化到文件中,可以选择追加JSON保存或序列化保存。两种方式各有优缺点。在性能方面,序列化保存要优于JSON追加保存。