Java非阻塞读取[关闭]
Posted
技术标签:
【中文标题】Java非阻塞读取[关闭]【英文标题】:Java Non-blocking Read [closed] 【发布时间】:2011-03-20 08:50:40 【问题描述】:我正在尝试从两个不同的输入流(子应用程序的标准输入和标准错误)中读取数据并将它们打印在一个组合帧中。我以前从未这样做过,我想知道最佳做法。
我可以生成两个线程并让它们都阻塞输入流。有没有更好的办法?
谢谢!
【问题讨论】:
您需要能够区分来自 stdin 和 stderr 的数据吗?如果没有,那么您可以使用ProcessBuilder.redirectErrorStream
将stderr 重定向到stdin 流。
【参考方案1】:
您的方法很好,但如果您尝试合并两个流,您可能会遇到输出/错误混杂在一起的问题。
也许可以查看Apache commons-exec,这是一个不错的库,用于处理进程调用和输出/错误捕获。在引擎盖下,它完全按照您的建议执行,分叉读取 InputStream(s) 的线程。
【讨论】:
【参考方案2】:拥有两个线程是唯一的解决方案。
【讨论】:
【参考方案3】:我认为您最好的策略是使用 java.nio 包中的类。签出this example。
【讨论】:
不可能。他正在使用 ProCess 的流。你不能在这些上使用 NIO。以上是关于Java非阻塞读取[关闭]的主要内容,如果未能解决你的问题,请参考以下文章