【问题标题】:BufferedReader ready method in a while loop to determine EOF?BufferedReader 在 while 循环中准备好方法来确定 EOF?
【发布时间】:2011-05-31 10:23:25
【问题描述】:

我有一个大文件(英文维基百科文章仅作为 XML 文件的数据库)。我正在使用BufferedReader 一次读取一个字符。伪代码为:

file = BufferedReader...

while (file.ready())
    character = file.read()

这真的有效吗?或者ready 会在等待硬盘返回数据时返回false,而不是在到达EOF 时返回?我尝试使用if (file.read() == -1),但似乎遇到了一个我根本找不到的无限循环。

我只是想知道它是否正在阅读整个文件,因为我的统计数据显示已阅读 444,380 个 Wikipedia 页面,但我认为还有更多文章。

【问题讨论】:

    标签: java bufferedreader


    【解决方案1】:

    这不能保证读取整个输入。 ready() 只是告诉你底层流是否准备好了一些内容。例如,如果它通过网络套接字或文件进行抽象,则可能意味着没有任何可用的缓冲数据

    【讨论】:

      【解决方案2】:

      Reader.ready() 方法不用于测试文件结尾。相反,它是一种测试调用read() 是否会阻塞的方法。

      检测您已达到 EOF 的正确方法是检查 read 调用的结果。

      例如,如果您一次读取一个字符,read() 方法将返回一个 int,它要么是一个有效字符,要么是 -1(如果您已到达文件末尾)。因此,您的代码应如下所示:

      int character;
      while ((character = file.read()) != -1) {
          ...
      }
      

      【讨论】:

        猜你喜欢
        • 2012-07-07
        • 1970-01-01
        • 2018-08-29
        • 2010-10-05
        • 2015-07-13
        • 1970-01-01
        • 1970-01-01
        • 2016-09-10
        • 1970-01-01
        相关资源
        最近更新 更多