返回
Java对象持久化追加并读取方案详述
后端
2023-11-10 10:50:21
简介
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追加保存。