【问题标题】:JAVA objectinputstream cant drop out from the loopJAVA objectinputstream 不能退出循环
【发布时间】:2017-10-18 16:12:49
【问题描述】:

这是我的代码:

    ObjectInputStream ois = null;
    UserRegistration UR = new UserRegistration();



    Scanner pause = new Scanner(System.in);
    Admin go = new Admin();
    try {

        //ItemEntry book = new ItemEntry();
        ois = new ObjectInputStream(new FileInputStream("Account.txt"));
        while ((UR = (UserRegistration) ois.readObject()) != null) {
            //if (book.getName().equals("1"))
            {
                System.out.println(UR);
            }
        }

    } catch (EOFException e) {
       System.out.println("\nEnd**");

    }catch (ClassNotFoundException ex) {
        System.out.println(ex.getMessage());
    } catch (IOException e) {
        System.out.println(e.getMessage());
    } finally {
        try {
            ois.close();
            System.out.println("Press \"ENTER\" to continue...");
            pause.nextLine();
            go.startup();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }
}

如何让它从循环中退出,而不是在到达最后一个对象时直接进入 EOFException?请帮忙!

【问题讨论】:

  • 在没有异常之前不会进入catch块
  • 为什么需要退出循环?也许有更好的方法来完成你正在尝试的事情。
  • 我尝试添加异常,但输出仍然保持不变。在while循环之后我不能做任何动作,导致它直接进入EOFException。
  • ois.available(); 应该会有所帮助。我不确定它是否适用于ObjectInputStream。否则,您可以考虑在文件的统计信息处写一个int,指示有多少对象,然后读取该数字。第二种选择更安全。

标签: java objectinputstream eofexception


【解决方案1】:

这是这个问题的重复:

Java FileInputStream ObjectInputStream reaches end of file EOF

底线是 ObjectInputStream 在到达流的末尾时不会返回 null。相反,底层 FileInputStream 会引发 EOFException。尽管您可以将其解释为文件的结尾,但它不允许您区分截断的文件。因此,实际上,ObjectInputStream 希望您知道您将读取多少个对象。

要解决这个问题,您可以在文件开头写入一个整数,指示文件中有多少个 UserRegistration 对象。读取该值,然后使用 for 循环读取那么多对象。

或者,您可以将 UserRegistration 对象序列化为数组或其他容器,然后反序列化整个数组/容器。

【讨论】:

    猜你喜欢
    • 2016-02-27
    • 2015-08-07
    • 2013-06-15
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 2014-04-12
    • 1970-01-01
    相关资源
    最近更新 更多