gpt4 book ai didi

java - BufferedReader 未返回

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:12 24 4
gpt4 key购买 nike

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

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

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

最佳答案

如果没有向流写入任何内容,则可能会发生这种情况。您可能经常遇到 readLine() 挂起的情况,即当您调用一个应该将错误写入 stderr 的进程时。该过程完成后,您可以尝试通过执行以下操作来读取所有错误:

BufferedReader brCleanUp = new BufferedReader(new InputStreamReader(stderr));
while ((line = brCleanUp.readLine()) != null) {
//process the error line
}
brCleanUp.close();

但是如果没有任何内容写入 stderr,上面的 readLine() 将按照您的描述挂起。

避免这种情况的方法是检查是否有任何读取流的点(我不知道这是否是一个错误,但这对我有用:)

boolean available = stderr.available() >= 1;
if (available) {
BufferedReader brCleanUp = new BufferedReader(new InputStreamReader(stderr));
for( ; available && (line = brCleanUp.readLine()) != null;
available = stderr.available() >= 1) {
System.out.println ("[Stderr] " + line);
}
brCleanUp.close();
}

关于java - BufferedReader 未返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51154417/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com