首页 >Java >java教程 >如何可靠地管理 Java 进程的输入/输出流以避免管道损坏并确保输出一致?

如何可靠地管理 Java 进程的输入/输出流以避免管道损坏并确保输出一致?

DDD
DDD原创
2024-12-29 12:16:12229浏览

How Can I Reliably Manage Input/Output Streams from a Java Process to Avoid Broken Pipes and Ensure Consistent Output?

Java 中的进程输入/输出流通信

在 Java 中,从正在运行的进程访问输入或输出流对于命令执行和执行至关重要。数据交换。然而,有效管理这些流时可能会出现陷阱。

问题亮点

您询问为什么您的代码示例会遇到损坏的管道错误以及为什么后续输出流无法运行第一次阅读后。问题在于代码从 shell 进程操作输入和输出流的方法。

解决方案

要解决此问题,请考虑以下步骤:

  1. 使用 ProcessBuilder: 将初始化“process”变量的代码替换为ProcessBuilder,它可以更好地控制流程处理。使用“ProcessBuilder.redirectErrorStream(true)”将标准输出和错误重定向到单个流。
  2. 打破循环习惯:从读取器(stdout)读取的循环仅退出当该过程完成时。这意味着如果未提供额外的输入,它将挂起。
  3. 引入命令分隔符:要可靠地检索多个命令的输出,请考虑采用“魔术字符串”技术。引入一个唯一的字符串(例如“--EOF--”)来标记每个命令输出的结尾。
  4. 调整输入写入: 要发送带有分隔符的命令,请附加命令为“&& echo --EOF--”。如果输入“exit”,则发送“exit”。

说明

这些修改解决了损坏的管道错误并允许执行多个命令一致的输出检索。 “魔术字符串”分隔符确保读取操作始终以分隔符终止,从而防止挂起。

尽管进行了这些调整,但仍然存在一些限制:

  • 用户输入提示命令可能会导致程序挂起。
  • 换行符终止输出的假设可能会引入问题。
  • “退出”处理已得到改进,但其他特殊输入情况可能需要额外考虑。

通过合并这些建议,您的代码可以有效地管理来自一个正在运行的进程,为定期执行命令的稳定可靠的计划任务铺平了道路。

以上是如何可靠地管理 Java 进程的输入/输出流以避免管道损坏并确保输出一致?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn