java.io.StreamCorruptedException:无效的流头:EFBBBFAC
我正在使用ObjectOutputStream和ObjectInputStream编写一个func,以将联系人信息导入和导出到文件中 我有一个异常java.io.StreamCorruptedException:invalid stream header:EFBBBFAC在ObjectInputStream的一部分,我不知道如何修复它 如何修复它,谢谢java.io.StreamCorruptedException:无效的流头:EFBBBFAC,java,serialization,objectinputstream,Java,Serialization,Objectinputstream,我正在使用ObjectOutputStream和ObjectInputStream编写一个func,以将联系人信息导入和导出到文件中 我有一个异常java.io.StreamCorruptedException:invalid stream header:EFBBBFAC在ObjectInputStream的一部分,我不知道如何修复它 如何修复它,谢谢 LienHe lh = new LienHe(name, phone, img); try { ObjectOutput
LienHe lh = new LienHe(name, phone, img);
try {
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream("src/Bai6/lienhe.txt", true));
out.writeObject(lh);
out.close();
} catch (FileNotFoundException ex) {
Logger.getLogger(FrmThemLienHe.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(FrmThemLienHe.class.getName()).log(Level.SEVERE, null, ex);
}
lst = new ArrayList<>();
try {// exception
ObjectInputStream in = new ObjectInputStream(
new FileInputStream("src/Bai6/lienhe.txt")));
while (in.available() > 0) {
LienHe lh = (LienHe) in.readObject();
lst.add(lh);
}
} catch (ClassNotFoundException | IOException ex) {
System.out.println(ex.getMessage());
}
LienHe lh=新LienHe(姓名、电话、img);
试一试{
ObjectOutputStream out=新的ObjectOutputStream(
新的FileOutputStream(“src/Bai6/lienhe.txt”,true));
out.writeObject(左侧);
out.close();
}捕获(FileNotFoundException ex){
Logger.getLogger(frmthemlinehe.class.getName()).log(Level.SEVERE,null,ex);
}捕获(IOEX异常){
Logger.getLogger(frmthemlinehe.class.getName()).log(Level.SEVERE,null,ex);
}
lst=新的ArrayList();
尝试{//异常
ObjectInputStream in=新ObjectInputStream(
新文件输入流(src/Bai6/lienhe.txt);
while(in.available()>0){
LienHe lh=(LienHe)in.readObject();
第一次添加(左侧);
}
}捕获(ClassNotFoundException | IOException ex){
System.out.println(例如getMessage());
}
如果不采取特殊措施,您就不能附加到ObjectOutputStream
。您应该序列化集合,并在执行此操作时替换整个文件。您没有这样说,但我假设您正在多次运行第一段代码(附加到同一文件),然后运行第二段代码一次。。。读取您编写的所有对象
实际上,您正在连接多个对象流,并尝试将其作为单个流读取
那不行。问题是每个流都以一个特殊的头开始。当您尝试将连接作为单个流读取时,读取器将看到意外的头。这就是导致您看到的异常的原因
解决方案是重新构造代码,以便编写器将所有对象写入同一个ObjectOutputStream。可能不相关,但.available()中的
in
并没有按照您的想法执行。起初我使用while(true)但是发生了一个错误,我在互联网上搜索,看到人们这样做。正确的和你看到的不一定是同一件事。请参阅Javadoc<代码>可用()。您应该只注意编写好的源代码提供的示例。