如何处理无效的流标头异常:00000001?

Posted

技术标签:

【中文标题】如何处理无效的流标头异常:00000001?【英文标题】:How do I handle an Invalid Stream header Exception: 00000001? 【发布时间】:2015-03-07 06:43:16 【问题描述】:

java.io.StreamCorruptedException: invalid stream header: 00000001 Simple Project

我发现了这个,这似乎是一个常见问题。如果您写入包含文件的目录,然后手动删除一个,您最终会收到此错误。

java.io.StreamCorruptedException: invalid stream header: 00000001
     at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:806)
     at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)

代码:

private void deserialize(File input)
    // Let's deserialize an Object
    System.out.println("Here");
    try 
                FileInputStream fileIn = new FileInputStream(input); 
                ObjectInputStream in = new ObjectInputStream(fileIn);
                    //System.out.println("Deserialized Data: \n" + ((Song)in.readObject()));
                    database.add((Song)in.readObject());
                in.close();
                fileIn.close();
     catch (FileNotFoundException e) 
        e.printStackTrace();
     catch (IOException e) 
        e.printStackTrace();
     catch (ClassNotFoundException ex) 
                    Logger.getLogger(Runner.class.getName()).log(Level.SEVERE, null, ex);
    


private void open()
    for(File fIn: f.listFiles())
        deserialize(fIn);
    

所以发生的事情是有一个名为 Song 的对象数据库。歌曲被序列化到我的家庭图书馆中的一个文件夹中。我可以看到这些文件,它们确实被完全反序列化了。程序运行没有问题,只是看到 Invalid Stream Header Exception 弹出很烦人,我不想在以后遇到问题。

除了“写入后不要触摸该目录”之外,我该如何处理这个异常?

【问题讨论】:

【参考方案1】:

基本上,这意味着您尝试读取的文件不包含序列化对象。

除了“写入后不要触摸该目录”之外,我该如何处理这个异常?

其他方式有:

仅反序列化文件名是您的应用程序将使用的文件。

过滤掉可能可疑的特定文件名;例如在 Mac 上,包含目录元数据的隐藏文件的名称。

捕获并忽略StreamIgnoredException,尽管这有点冒险。 (该文件可能是一个真正的序列化对象,但由于其他原因而损坏......您需要了解它。)


顺便说一句,像你这样处理异常是个坏主意。如果异常是真正预期的,那么您不想打印堆栈跟踪。如果出现意外,建议停止加载目录,并允许异常传播。至少,您需要向调用者报告负载有问题。 (另一方面,如果程序正在运行,用户不应该面对堆栈跟踪...... erm ... 正在运行。)

【讨论】:

以上是关于如何处理无效的流标头异常:00000001?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理无效的 CORS 预检请求?

如何处理spring boot 2中@Requestbody中的对象抛出的异常

如何处理 PHP 请求中的长标头声明?

如何处理多个异常

C# 中的异常处理 - 如何处理?

java是如何处理异常的?