java.io.StreamCorruptedException:无效的流标题:EFBBBFAC

时间:2017-05-27 11:33:33

标签: java serialization objectinputstream

我正在用ObjectOutputStream和ObjectInputStream编写一个func来将联系人信息导入和导出到文件中。

我有一个异常java.io.StreamCorruptedException:无效的流标题:部分ObjectInputStream中的EFBBBFAC,我不知道修复它。

如何修复它,谢谢。

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());
    }

2 个答案:

答案 0 :(得分:0)

如果不采取特殊措施,您无法附加到 <!DOCTYPE html> <html> <title>AI spawn test</title> <canvas id="canvas" width="110" height="110"></canvas> <script> var ctx = canvas.getContext("2d"); var drawRect=function(rects){ for (var i=1; i<=rects; i++){ var rand3=Math.floor(Math.random() * 100) + 1; var rand4=Math.floor(Math.random() * 100) + 1; ctx.fillStyle='red'; ctx.fillRect(rand3, rand4, 10, 10) } } drawRect(20); </script>。您应序列化集合,并在执行此操作时替换整个文件。

答案 1 :(得分:0)

你没有这么说,但是我假设你多次运行第一块代码(附加到同一个文件)然后再运行第二个代码...来读取你写的所有对象

实际上,您正在连接多个对象流,并尝试将其作为单个流进行读取。

那不行。问题是每个流都以特殊标头开头。当您尝试将串联作为单个流读取时,阅读器将看到意外的标头。这就是你所看到的异常的原因。

解决方案是重构代码,以便编写器将所有对象写入同一个ObjectOutputStream。