我正在尝试在“序列化”一章末尾练习中给出的程序。将对象附加到.txt文件
程序要求我声明一个类Person,它只封装Name和Address类型的两个数据成员,它们也是类。 然后,我必须从键盘取出一系列名称和地址,创建对象并将它们写入文件。 但是,如果FILE ALREADY EXISTS那么对象必须被附加到现有文件。 我的程序运行非常好,第一次,但第二次,当我尝试读回追加的记录,我得到一个异常
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");
扩展名'.txt'表示该文件包含人类可读的文本。对象流是二进制的。 –
序列化不会生成文本。您不会将对象附加到文本文件,也不应该使用'.txt'文件扩展名。 – EJP