当前位置: 首页 > 面试题库 >

使用ObjectInputStream读取文件时出现EOFException [重复]

罗昕
2023-03-14
问题内容

我基本上有一个与此处所述类似的问题:读取objectinputstream时,Java中出现EOFexception,但是我找不到干净的答案。

答案表明,ObjectInputStream#readObject当读者到达文件结尾时,将会抛出异常。在网上寻找解决方案后,我没有找到解决方案。对于这种情况,可能是一个好的干净的解决方案吗?

注意:我已经试过了(但是看起来很丑,而且代码也不干净)。我正在寻找更好的解决方案:

ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
try {
    Object o;
    while ((o = ois.readObject()) != null) {
        if (o instanceof MyClass) {
            MyClass m = (MyClass)o;
            //use the object...
        }
    }
} catch (EOFException eofex) {
    //do nothing
}  catch (IOException ioex) {
    throw ioex;
    //I have another try/catch block outside to control the life of the ObjectInputStream
}
//later in the code...
ois.close();

问题答案:

那是应该发生的。您的代码是错误的。检查Javadoc。readObject()null在您写了时返回null。它并没有说要在EOF返回null。仅当您编写过孔时才循环直到readObject()返回为止,否则,将得到一个。null``null``writeObject()``EOFException



 类似资料:
  • 问题内容: 我想读取已输出到.dat文件的多个对象(我自己的类Term),但始终会得到nullPointException或EOFException。 问题答案: 请参阅Javadoc。在EOF处不返回null。它抛出异常返回null的唯一方法是在另一端写了null,这不一定是终止读取循环的一个好理由。 简而言之,您的代码是错误的。 注意,“ o”的初始化是多余的。 注意(2)您发布的代码不能为空

  • 我正试图在服务器端序列化一个HashMap(Tomcat 6 . 0 . 29 ),并在客户端android应用程序上反序列化它。 我第一次尝试这个,我得到了StreamCoruptedExc的,但在我创建了一个全新的servlet与干净的doget/doPost-方法,我已经设法解决了这个问题,不幸的是,我得到了一个EOF异常,而不是。 所以,首先我发布我的代码,然后我将详细解释我的问题: 服务

  • 我已经创建了一个可外部化的对象用户。除了我退出应用程序并重新打开它之外,它在写入和从存储中读取它时工作得很好。然后出现此错误: 在java.io.datainputstream.readfully(datainputstream.java:197)在java.io.datainputstream.readutf(datainputstream.java:609)在java.io.datainput

  • 我正在尝试实现一个“帐户”列表的加载/保存,其方法与我成功使用的一个HashMap类似。 背景: 在这里我想设置我的帐户列表包括保存的帐户。 加载/保存实现: 问题是,当我第一次初始化AccountManager时,accounts.ser文件没有保存的帐户,因为该功能是在稍后的方法中实现的,因此给出了以下例外情况: 我尝试在捕获EOFExceptions时将account设置为新的ArrayLi

  • 在我的程序的先前代码中,我使用 ObjectOutputStream 和 FileOutPutStream 将一个 ArrayList(由名为 location 的自定义类的对象组成,如您在代码中看到的那样)。但是,当尝试使用 ObjectInputStream 从文件中检索对象时,我收到一条错误消息,指出我有一个未处理的异常(ClassNotFoundException)。 以下是我用来从文件中

  • 我在apache Spark中读取本地文件时出错。scala>val f=sc.textfile(“/home/cloudera/downloads/sample.txt”)