我需要关闭Java中的InputStream吗?

我需要关闭Java中的InputStream吗?,java,inputstream,Java,Inputstream,我的代码是: InputStream confFile=classLoader.getResourceAsStream("myconffile.properties"); 在文档中: InputStream的close方法不起任何作用 这是否意味着我不需要关闭InputStream?您确实需要关闭输入流,因为您提到的方法返回的流实际上是保存文件句柄的InputStream的某个其他子类。如果不关闭此流,则存在资源泄漏。否,这并不意味着-因为InputStream是一个抽象类,getResour

我的代码是:

InputStream confFile=classLoader.getResourceAsStream("myconffile.properties");
在文档中:

InputStream的close方法不起任何作用


这是否意味着我不需要关闭InputStream?

您确实需要关闭输入流,因为您提到的方法返回的流实际上是保存文件句柄的
InputStream的某个其他子类。如果不关闭此流,则存在资源泄漏。

否,这并不意味着-因为
InputStream
是一个抽象类,
getResourceAsStream()
返回一个具体的子类,其
close()
方法做了一些事情——最重要的是释放了一个文件句柄。

我认为在大多数情况下它不会是一个FileInputStream。我应该对此进行调查,遗憾的是,我手头没有任何java实例。但是,我同意你的说法,它持有一个文件句柄。finalize()方法是否会为你关闭资源流?@Ryan Amos:是-何时以及是否运行。这可能是一个任意长的时间后,时间足以让您运行的文件句柄。或删除或重命名操作失败。实际发生在我身上的事情(不是资源流):我想修改图像文件的EXIF元数据。这涉及使用update meata创建文件的副本,然后删除原始文件并将副本重命名为原始文件名。不幸的是,EXIF操作库没有关闭原始文件上的输入流,这导致删除失败(大多数情况下)。@MichaelBorgwardt您是对的,在我的实验中,它似乎是
ByteArrayInputStream