本文探讨了在使用 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; } }
必须承认这种方法的局限性:
本文概述的更改为使用 Java 进程时维护输入/输出流功能所遇到的挑战提供了全面的解决方案。虽然该技术可能有一定的局限性,但它提供了一种可靠的方法来执行 shell 命令并通过计划任务定期检索其输出。
以上是如何可靠地处理 Java 进程中的输入/输出流?的详细内容。更多信息请关注PHP中文网其他相关文章!