管道进出javas stdin / stdout时如何捕获错误

时间:2014-06-16 05:32:06

标签: java io try-catch

我有一个java应用程序从stdin获取数据并将结果写入stdout。像这样:

app1 | java_app | app2

通过管道移动的数据量很大,需要很长时间(小时和天数并不罕见或意外)。

似乎如果app1死亡,并关闭管道的末尾,我会收到与管道相关的异常。但是app2死了,关闭管道的末端我没有收到异常。这意味着java_app继续消耗输入,这将永远不会产生任何有用的输出,运行数小时或数天。

管道异常报告的差异似乎源于System.inInputStream,而System.outPrintStreamPrintStream吞没了任何错误。我知道你可以使用PrintStreamstream.checkError()获取错误状态 - 但是在任何地方使用它都很笨重(强制刷新你的输出流。) 我很高兴放弃PrintStream的大部分功能来获得更好的错误报告。

是否有其他方法可以访问未包含在PrintStream中的stdout,而是更好的OutputStream

1 个答案:

答案 0 :(得分:1)

原来我的一位同事找到了一个很好的方法来做到这一点。

OutputStream stream = new FileOutputStream(FileDescriptor.out);