使用ObjectOutputStream读取多个对象时发生java.io.StreamCorruptedException错误
我试图通过多次运行代码将多个对象保存到一个文件中。但是在第二次运行中,我得到了一个java.io.StreamCorruptedException错误使用ObjectOutputStream读取多个对象时发生java.io.StreamCorruptedException错误,java,io,Java,Io,我试图通过多次运行代码将多个对象保存到一个文件中。但是在第二次运行中,我得到了一个java.io.StreamCorruptedException错误 package BinaryIO; import java.io.*; public class OOSDemo { public static void main(String[] args) throws IOException, ClassNotFoundException { File file = new F
package BinaryIO;
import java.io.*;
public class OOSDemo {
public static void main(String[] args) throws IOException, ClassNotFoundException {
File file = new File("src/BinaryIO/robotData.dat");
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file, true))) {
oos.writeObject(new Robot());
oos.flush();
}
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) {
while (true) {
try {
System.out.println(ois.readObject().toString());
} catch (EOFException e) {
break;
}
}
}
}
}
class Robot implements Serializable {
int x, y;
String model;
public Robot() {
this(0, 0, "Default");
}
public Robot(int x, int y, String model) {
this.x = x;
this.y = y;
this.model = model;
}
@Override
public String toString() {
return String.format("Robot: (%d, %d), Model: %s", x, y, model);
}
}
第二次运行时出错:
Robot: (0, 0), Model: Default
Exception in thread "main" java.io.StreamCorruptedException: invalid type code: AC
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1743)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:519)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:477)
at BinaryIO.OOSDemo.main(OOSDemo.java:14)
我无法确定问题所在。
在在线论坛上,它说如果出现以下情况,可能会发生错误:
请包括完整的堆栈跟踪,并指出是哪一行代码触发了错误(是这一部分
ois.readObject().toString()
?)您没有关闭或刷新输出流,在打开它进行输入时,可能还没有写入所有数据。@sorifiend Yes。我已经更新了这个问题。@ShivPatel,因为:---当我说你不能追加时,我的意思是说你需要跳越额外的障碍才能使之生效。既然你不是,附加对你没用。“那些额外的圈圈是一种恶作剧。”希夫帕特尔也许如果你真的读了我链接到的答案,你就会知道了。重新封顶:OOS在第一个对象之前写入头。追加时,会写入一个新的头,OIS将无法读取该头。