Java中的EOFException

时间:2014-11-18 19:40:43

标签: java exception

我目前正在JAVA中进行序列化,截至目前,我已经使序列化和反序列化正常工作。例如,如果我在节目中制作电影,关闭节目然后重新打开节目,电影仍将在那里。我的问题是,即使所有代码都正常工作,并且在运行程序时序列化工作正常,我也会收到此错误。

在这里,您可以看到我的程序正在运行并显示异常

Exception error

以下是异常指向的代码

public void readRecordsFromFile()
{
    Video v = null;

    try
    {
        FileInputStream fileIn = new FileInputStream("PrintOut.dat");
        ObjectInputStream in = new ObjectInputStream(fileIn);

        while((v = (Video)in.readObject()) != null)
        {
            videos.add(v);
        }
        //videos=(ArrayList<Video>)in.readObject();

        fileIn.close();
        in.close();

    }

    catch(IOException i)
    {
        System.out.println("IO Exception");
        i.printStackTrace();
        return;
    }

    catch(ClassNotFoundException m)
    {
        System.out.println("Class Not Found Exception");
        m.printStackTrace();
        return;
    }
}

特别是它指向

while((v = (Video)in.readObject()) !=null)

有没有办法删除异常?事实上我的程序运行正常,即使有例外也让我相信它可能并不重要,但我觉得删除异常是一种好习惯。

任何帮助将不胜感激,如果需要任何其他代码,请告诉我, 提前致谢, 杰森

2 个答案:

答案 0 :(得分:3)

ObjectInputStream打到缓冲区时,没有真正干净的方法。

你最好的策略是从一开始就写一个整数来说明你要编写多少个对象。然后,当你回读对象时,首先读取这个整数;然后你从流中读到了很多对象。

答案 1 :(得分:1)

EOFException意味着你点击了文件的末尾,没有什么可以真正处理它。我建议为EOFException添加一个新的catch来防止错误出现在你的控制台中。我还将close()调用移动到finally块 - 所以像这样:

public void readRecordsFromFile()
{
    Video v = null;

    try
    {
        FileInputStream fileIn = new FileInputStream("PrintOut.dat");
        ObjectInputStream in = new ObjectInputStream(fileIn);

        while((v = (Video)in.readObject()) != null)
        {
            videos.add(v);
        }
        //videos=(ArrayList<Video>)in.readObject();

    }

    catch(IOException i)
    {
        System.out.println("IO Exception");
        i.printStackTrace();
        return;
    }

    catch(ClassNotFoundException m)
    {
        System.out.println("Class Not Found Exception");
        m.printStackTrace();
        return;
    }

    catch(EOFException eofe)
    {
         // Don't print anything, we just don't want the error blowing up in the regular output.
         return;
    }

    finally
    {
        // Guarantee that the streams are closed, even if there's an error.
        fileIn.close();
        in.close();
    }
}