FindBugs:“可能无法关闭流” - 这在 InputStream 的情况下有效吗?

thS*_*oft 3 java findbugs stream

在我的 Java 代码中,我启动了一个新进程,然后获取其输入流以读取它:

BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
Run Code Online (Sandbox Code Playgroud)

FindBugs 在这里报告错误:

may fail to close stream
Pattern id: OS_OPEN_STREAM, type: OS, category: BAD_PRACTICE
Run Code Online (Sandbox Code Playgroud)

我必须关闭另一个进程的 InputStream 吗?更重要的是,根据它的 Javadoc, InputStream#close() 什么都不做。那么这是误报,还是应该在完成后真正关闭流程的输入流?

Sea*_*wen 5

在这种情况下,你要close()Reader,这将关闭其底层流。是的,关闭流总是好的做法,即使此时您知道您正在查看的实现没有做任何事情(尽管,实际上,它在这里做!)。如果后来改变了怎么办?

FindBugs 仅用于警告可能的错误;它不能总是确切地知道。

最后是的,您的 Java 进程拥有Process您生成的进程和对象。您绝对需要关闭它和输出流。没有其他人在使用它们,而且,做这些事情以避免与操作系统相关的流有趣的业务很重要。