gpt4 book ai didi

java - 使用非 block I/O 从 Runtime().exec 读取输入

转载 作者:行者123 更新时间:2023-11-29 08:49:13 24 4
gpt4 key购买 nike

好像是用BufferedReader读取一个进程的InputStream将以某种方式导致 block I/O 行为。效果就像程序没有从流程中获得即时输入一样。我知道那时可以读取更多行,但是 BufferedReader继续等待一段时间,然后我终于可以更新线路了。

代码如下:

While((str=bufferedReader.readLine()!=null) {
System.out.println(str);
}

有没有什么方法可以不阻塞地从进程中读取数据在 while() 条件下?导致进程不会返回 null 或任何东西....

最佳答案

您可以在单独的线程中读取子进程输出。像这样

static BlockingQueue<String> queue = new LinkedBlockingDeque<>();

public static void main(String[] args) throws Exception {
Process p = Runtime.getRuntime().exec("cmd /c dir");
final BufferedReader rdr = new BufferedReader(new InputStreamReader(p.getInputStream()));
Thread t = new Thread() {
public void run() {
try {
for (String line; (line = rdr.readLine()) != null;) {
queue.put(line);
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
t.start();
for (;;) {
String line = queue.poll();
if (line != null) {
System.out.println(line);
} else if (!t.isAlive()) {
break;
}
}
}

关于java - 使用非 block I/O 从 Runtime().exec 读取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23556392/

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