【问题标题】:BufferedReader not returningBufferedReader 不返回
【发布时间】:2018-12-11 18:12:15
【问题描述】:

我正在使用 Java 运行程序并将程序的文本输出读取到缓冲阅读器中。然后我想通过这样做打印出结果:

    while((line=input.readLine()) != null){
        System.out.println(line);
    }

由于某种原因,在执行此操作时,readLine() 方法根本不会在文本中途返回,程序会无限期地等待。然而,当直接从命令行运行这个程序时,它的输出与预期的完全一样,只有 100 行左右的简单文本。什么可能导致 readLine() 在读取简单文本的过程中不返回?

【问题讨论】:

  • 这个问题与 java-streamstream 有什么关系?
  • 需要一个可重现的例子
  • @chessprogrammer 练习的重点是将程序减少到仍然会产生错误的最小占用空间。你必须投入时间。
  • 当你阅读“程序的文本输出”时,readLine() 可能会阻塞,直到程序写入另一行或程序关闭流,这通常只在程序退出时发生。一个典型的问题是程序等待你这边的输入,然后你就死锁了。
  • 如果这段代码正好在中途阻塞,那么input 有问题。数据错误(错误的编码,例如 UTF-8)不太可能导致阻塞。远程连接超时可能就是这种情况。

标签: java command-line stream inputstream bufferedreader


【解决方案1】:

你需要像这样将文本文档编码成UTF-8,然后使用Scanner

// specify file path
String filePath = "C:/path/path/file-location/file.txt";
// make a scanner with the UTF-8 param
Scanner scanner = new Scanner(new File(filePath),"UTF-8");
// loop through text 
while (scanner.hasNextLine()){
   System.out.println(scanner.nextLine());
}

实际上有几种方法可以像这样对文本进行编码,但重要性在于文本编码本身。获得正确格式的文档后,您选择读取输入的对象和类由您自行决定。

【讨论】:

    【解决方案2】:

    什么可能导致 readLine() 在读取简单文本的过程中不返回?

    如果您正在从文件系统中读取文件,这可能是由于文件系统的问题;例如远程文件服务器没有响应。

    如果您正在从套接字读取,则远程服务器尚未(尚未)写入/刷新您尝试读取的数据,或者网络问题正在阻止数据通过。

    如果您正在从管道读取数据(例如,另一个程序的输出),那么其他程序还没有写入/刷新您尝试读取的数据。

    (另一种情况是从“设备文件”或“/proc”文件系统中的文件或回送文件系统中读取。在这些情况下,可能的原因很难列举。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-03
      • 2013-05-13
      • 2016-07-09
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 2015-05-07
      相关资源
      最近更新 更多