繁体   English   中英

测试从输入流读取的缓冲读取器

[英]Testing a buffered reader reading from input stream

我在测试代码时遇到问题。 我认为问题与使用从InputStreamReader读取的BufferedReader有关。 我使用IntelliJ并提供以下输入:

Hello
World!

为什么我的程序没有打印任何东西? 这是我的代码:

public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    Deque<String> lines = new ArrayDeque<>();
    String line = br.readLine();

    while (line != null) {
        lines.push(line);
        line = br.readLine();
    }

    while (!lines.isEmpty()) {
        System.out.println(lines.pop());
    }
}

你的代码在第一个循环中出现了问题。

要解决此问题,只需将循环条件修改为下一个:

while (line != null && !line.isEmpty()) {
    lines.push(line);
    line = br.readLine();
}

只需按Enter键,您的循环就会退出。

或者您可以添加任何其他exit code 例如while (line != null && !line.equals("exit")) 因此,当您在控制台中输入exit code (在上例中exit )时,您的循环将停止,您将获得所需的输出。

您陷入了无限循环,因为以下条件永远不会评估为false:

while (line != null) {
  lines.push(line);
  line = br.readLine();
}

您的代码必须知道何时完成提供输入。 Ubuntu上我必须输入:

Hello
World

比我确实击中Strg + D来表示EOS 之后我得到了输出:

Hello
World

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM