首页 > Java > java教程 > 如何可靠地处理 Java 进程中的输入/输出流?

如何可靠地处理 Java 进程中的输入/输出流?

Mary-Kate Olsen
发布: 2024-12-17 21:16:11
原创
810 人浏览过

How to Reliably Handle Input/Output Streams in Java Processes?

带有输入/输出流的 Java 进程

本文探讨了在使用 Java 进程时利用输入和输出流的复杂性。我们将特别关注解决在维护这些流的功能时遇到的挑战。

背景

提供的代码示例举例说明了一个场景,其中可以将命令输入到 bash shell 中,随后的输出为回声。然而,在初次读取后就会出现问题,导致后续输出流无法操作。本文旨在阐明这些问题并提出解决方案。

解决问题

第一步涉及修改代码片段以利用 ProcessBuilder 类,这简化了外部流程执行。它的主要优点是能够将子进程的标准错误流重定向到其标准输出。

ProcessBuilder builder = new ProcessBuilder("/bin/bash");
builder.redirectErrorStream(true);
Process process = builder.start();
登录后复制

此外,负责读取进程标准输出的循环很容易挂起,因为它们仅在结束时终止来自阅读器的文件。为了解决这个问题,采用了一种涉及“魔法”线的技术来划分 shell 命令输出的结论。

while (scan.hasNext()) {
    String input = scan.nextLine();
    writer.write("((" + input + ") && echo --EOF--) || echo --EOF--\n");
    writer.flush();

    line = reader.readLine();
    while (line != null && ! line.trim().equals("--EOF--")) {
        System.out.println ("Stdout: " + line);
        line = reader.readLine();
    }
    if (line == null) {
        break;
    }
}
登录后复制

局限性

必须承认这种方法的局限性:

  • 提示用户输入的命令可能会导致程序出现无响应。
  • 每个进程输出都以换行符终止的假设可能并不在所有情况下都成立。
  • 执行的命令输出“--EOF--”的罕见情况可能会导致错误的行为。
  • bash 命令中不匹配的括号可能会导致语法错误和进程

结论

本文概述的更改为使用 Java 进程时维护输入/输出流功能所遇到的挑战提供了全面的解决方案。虽然该技术可能有一定的局限性,但它提供了一种可靠的方法来执行 shell 命令并通过计划任务定期检索其输出。

以上是如何可靠地处理 Java 进程中的输入/输出流?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板