gpt4 book ai didi

java - 序列化和反序列化同一对象并不反射(reflect)其状态的变化

转载 作者:行者123 更新时间:2023-12-02 10:47:25 25 4
gpt4 key购买 nike

当我尝试序列化一个对象时,多次反序列化它。在第一次尝试中,效果很好。但是从我第二次运行上面的代码来更改对象的属性时,它们在文件中没有更改。既不重写也不附加。

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

关于java - 序列化和反序列化同一对象并不反射(reflect)其状态的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52447156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com