java - 读取java进程的输入流

标签 java process io inputstream processbuilder

我正在尝试使用 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/

相关文章:

android - Android中两个进程如何共享相同的代码?

Hadoop Map-Reduce OutputFormat 用于将结果分配给内存变量(不是文件)?

java - 公共(public)接口(interface) BaseRepository 扩展 JpaRepository<Category, Long>{ }

Java2D绘图闪烁

windows - 如何确定进程是否是当前事件/前台应用程序

c - 编译器如何知道 C 中的指针地址是端口映射还是 RAM?

Haskell 处理 [IO 字符串]

java - 如何通过蓝牙向 OBDII 适配器发送 ELM327 命令?

java - double 方法的 null 检测

c# - 杀死远程机器上的进程