【问题标题】:Read inputstream of a java process读取java进程的输入流
【发布时间】:2014-06-17 02:16:09
【问题描述】:

我正在尝试使用 Java 中的 Processbuilder 运行 Linux 进程,然后读取输入和错误流。 Linux 进程是一个阻塞进程,并将输出写入控制台/标准输出。

当我尝试读取 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 process io inputstream processbuilder


    【解决方案1】:

    这是生产过程中的缓冲。在 Java 端你无能为力。

    【讨论】:

    • 同一个c程序在命令行界面运行时,即使少至100字节也能立即输出。但是当使用java运行时,问题就出现了。
    • 没有。当其输出运行到管道而不是控制台时,stdio 行缓冲不再发生。 Java 与它无关。
    猜你喜欢
    • 2015-12-23
    • 2012-03-21
    • 2014-12-04
    • 2019-07-15
    • 2011-05-29
    • 2014-10-03
    • 2018-09-07
    • 2013-09-19
    • 1970-01-01
    相关资源
    最近更新 更多