我正在尝试在“序列化”一章末尾的练习中给出的程序。
该程序要求我声明一个 Person 类,它只封装了 Name 和 Address 类型的两个数据成员,它们也是类。然后我必须从键盘上获取一系列名称和地址,创建对象并将它们写入文件。但是,如果文件已经存在,则必须将对象附加到现有文件中。我的程序第一次运行完美,但第二次,当我尝试回读附加记录时,我得到一个异常
java.io.StreamCorruptedException: invalid type code: AC
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1374)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
at Trial.main(Trial.java:66)
我对此进行了一些研究,发现 StreamHeader 只能编写一次并且附加会破坏它。有什么办法吗???
对象编写代码是:
try(ObjectOutputStream stream = new ObjectOutputStream(new BufferedOutputStream(Files.newOutputStream(filePath,WRITE,CREATE,APPEND)))) {
for(int i = 0;i<name.length;i++) {
Person aPerson = new Person(name[i],address[i]);
System.out.println(aPerson);
stream.writeObject(aPerson);
stream.reset();
aPerson = null;
}
System.out.println("Writing Complete");