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非阻塞读取[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

检测非阻塞套接字上的关闭连接

java io读取性能对比

Linux 阻塞与非阻塞串行读取

Java中的非阻塞异步IO

从操作系统内核看Java非阻塞IO事件检测

[Java] 非阻塞IO