【发布时间】:2019-02-26 01:35:03
【问题描述】:
当我尝试序列化一个对象以多次反序列化它时。 在第一次尝试中,它工作正常。但是从我第二次运行上面的代码改变对象的属性开始,它们在文件中没有改变。 既没有覆盖也没有附加。
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));
}
}
【问题讨论】:
-
在 Java 对象流被关闭后,您不能追加它。您必须创建自己的协议来包装您的序列化对象。
标签: java serialization deserialization filestream objectoutputstream