java - 序列化和反序列化同一个对象并不反映它的状态变化
问题描述
当我尝试序列化一个对象以多次反序列化它时。在第一次尝试中,它工作正常。但是从我第二次运行上述代码更改对象的属性开始,它们在文件中没有更改。既不覆盖也不附加。
import java.io.*;
import java.util.ArrayList;
public class FileWrite {
static String es="EmailSave.txt";
public static void writeTo(String name, String line) throws IOException {
File OfficeRes = new File(name);
BufferedWriter bw = new BufferedWriter(new FileWriter(OfficeRes, true));
bw.append(line);
bw.append("\n");
bw.close();
}
public static void serializeTo(String file, Serializable s) throws IOException {
FileOutputStream f = new FileOutputStream(file, true);
ObjectOutputStream os = new ObjectOutputStream(f);
os.writeObject(s);
os.close();
}
public static Object deserializeFrom(String file) throws IOException, ClassNotFoundException {
//assumption: file only has one serialized object
FileInputStream f = new FileInputStream(file);
ObjectInputStream obj = new ObjectInputStream(f);
Object a=obj.readObject();
obj.close();
return a;
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
OfficialRecipient a1=new OfficialRecipient();
OfficialFriend a2=new OfficialFriend();
PersonalRecipient a3=new PersonalRecipient();
OfficialFriend a4=new OfficialFriend();
a4.designation="tghfgbrb";
a3.name="bhuvuycghchg";
a1.email="bygygygyg";
ArrayList<Recipient> a=new ArrayList<>();
a.add(a1);
a.add(a2);
a.add(a3);
a.add(a4);
serializeTo(es, a);
System.out.println(deserializeFrom(es));
}
}
解决方案
问题是您要附加到输出文件而不是覆盖。然后,当您从文件中读取时,您将获得第一个对象,这是最旧的对象。
当你这样做时:new FileWriter(file, true)
第二个参数true
导致FileWriter
附加到文件中。
您需要将其false
用作第二个参数,以便每次运行时都会覆盖文件中的数据,而不是追加:
new FileOutputStream(file, false);
推荐阅读
- react-native - 使用 Hooks 进行 Back to Back API 调用不起作用
- json - 颤振:json_serializable 1 => true,0 => false
- javascript - 我正在尝试使用javascript在li内的元素进行下拉菜单
- cognos - 运行/打开带有 URL 参数的报告
- docker - 如何克服通过 docker 捕获的挖矿恶意软件?
- python - python c++ api PyRun_SimpleFile 没有给出想要的输出
- java - 可以使用接口实现抽象吗
- node.js - npm 错误!cb.apply 在执行时不是一个函数 > npm install @angular/cli@latest
- kubernetes - 为了获得容器所有副本的 cpu_usage_seconds_total 总和,可以在 prometheus 适配器上进行哪些配置?
- xml - xmlstarlet parce 具有相同根的多棵树