我有一个 Java 应用程序从 stdin
获取数据并将结果写入 stdout
。像这样:
app1 | java_app | app2
通过管道移动的数据量很大并且需要很长时间(数小时和数天并不少见或意外)。
似乎如果 app1
死了,并关闭了它的管道末端,我会收到一个与管道相关的异常。但是 app2
死了,并关闭了它的管道末端我没有收到异常。这意味着 java_app
继续消耗输入,这将永远不会生成任何有用的输出,运行数小时或数天。
管道异常报告的差异似乎源于 System.in
是一个 InputStream
,而 System.out
是一个 PrintStream
和 PrintStream
吞没任何错误。我知道您可以使用 stream.checkError()
从 PrintStream
获取错误状态 - 但在任何地方使用它都很笨拙(并强制刷新输出流。)
我很高兴放弃 PrintStream
的大部分功能以获得更好的错误报告。
是否有另一种方法来访问未包装在 PrintStream
中的 stdout,而是更好的 OutputStream
?
最佳答案
原来我的一位同事找到了一个很好的方法来做到这一点。
OutputStream stream = new FileOutputStream(FileDescriptor.out);
关于java - 如何在管道传输到/从 javas stdin/stdout 时捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24237138/