我目前正在JAVA中进行序列化,截至目前,我已经使序列化和反序列化正常工作。例如,如果我在节目中制作电影,关闭节目然后重新打开节目,电影仍将在那里。我的问题是,即使所有代码都正常工作,并且在运行程序时序列化工作正常,我也会收到此错误。
在这里,您可以看到我的程序正在运行并显示异常
以下是异常指向的代码
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)
有没有办法删除异常?事实上我的程序运行正常,即使有例外也让我相信它可能并不重要,但我觉得删除异常是一种好习惯。
任何帮助将不胜感激,如果需要任何其他代码,请告诉我, 提前致谢, 杰森
答案 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();
}
}