Java FindBugs:“您必须遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他有关法律法规。”;“可能无法关闭流”对于InputStream,这是否有效?

Java FindBugs:“您必须遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他有关法律法规。”;“可能无法关闭流”对于InputStream,这是否有效?,java,stream,findbugs,Java,Stream,Findbugs,在我的Java代码中,我启动一个新进程,然后获取它的输入流来读取它: BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); FindBugs在此处报告错误: may fail to close stream Pattern id: OS_OPEN_STREAM, type: OS, category: BAD_PRACTICE 我必须关闭另一个进程的输入流吗?而

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

BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
FindBugs在此处报告错误:

may fail to close stream
Pattern id: OS_OPEN_STREAM, type: OS, category: BAD_PRACTICE

我必须关闭另一个进程的输入流吗?而且,根据InputStream#close()什么也不做。那么这是一个误判,还是我应该在完成后关闭进程的输入流?

InputStream
是一个抽象类-仅仅因为它的实现没有任何功能并不意味着
process.getInputStream()返回的对象的实际类型没有


在这种特殊情况下,如果不关闭输入流,可能不会造成任何伤害,但我个人不会相信这一点。关闭它就像关闭任何其他输入流一样。除此之外,如果您决定将代码更改为从其他文件读取,这将使您的代码更加健壮—可以很容易地(比如)从文件中读取,并且不会注意到您没有关闭
FileInputStream

我认为关闭所有打开的流始终是一种好的做法。最好在finally{}块中。既然它没有像java所说的那样做,为什么不调用close()方法呢。它没有害处。

在这种情况下,您希望
关闭
读取器()
,这将关闭其底层流。是的,关闭流始终是一种很好的做法,即使此时您知道您正在查看的实现没有任何作用(尽管事实上,它在这里起作用!)。如果后来改变了呢

FindBugs只是警告可能的错误;它不能总是确定


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

没有注意到它是抽象的,这是多么失败的一件事啊-真让我感到羞耻。。。好的,我把它关上。让我困惑的是,并不是我显式地打开流。好吧,我依赖于实现的另一个失败。。。正如你所建议的那样,我现在关闭阅读器。