我正在尝试使用 java 中的 Processbuilder 运行 Linux 进程,然后读取输入和错误流。 Linux 进程是一个阻塞进程,并将输出写入控制台/stdout。
当我尝试读取 java 进程的输入流(错误流重定向)时,在进程写入最多 4K 字节之前我无法获取任何数据。一旦进程输出达到此限制附近,我就会获得输入流中可用的数据。如何改变这种行为并从输入流中实时获取数据而不是等到达到 4K。
这是我尝试过的:
process = new ProcessBuilder().command("some daemon program", "arg1").start();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null)
System.out.println(line);
仅在大约 4k 字节后,我才在输入流中获取可用数据。有什么想法吗???
最佳答案
这就是生产过程中的缓冲。在 Java 端您对此无能为力。
关于java - 读取java进程的输入流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24254778/