InputStream.close() 有啥作用吗?

Posted

技术标签:

【中文标题】InputStream.close() 有啥作用吗?【英文标题】:Does InputStream.close() do anything?InputStream.close() 有什么作用吗? 【发布时间】:2016-01-13 22:36:49 【问题描述】:

根据official documentation:

公共无效关闭() 抛出 IOException

关闭此输入流并释放与该流关联的所有系统资源。

InputStream 的 close 方法什么都不做。

那么它什么也没做或什么?

【问题讨论】:

@Saif ... 在它下面说它没有。 【参考方案1】:

不,它什么都不做,但是 InputStream 是一个 abstract 类,其中 close 不是抽象的(它实现了 java.io.Closeable ),它有一个空的主体。 InputStream 的实现者可以选择覆盖该方法。 FileInputStream 关闭文件输入流并释放ByteInputStream 不执行任何操作的所有系统资源。

【讨论】:

【参考方案2】:

InputStreamclose() 方法什么也不做。 InputStream 的子类的close() 方法可以做一些事情。

【讨论】:

所以应该始终close()InputStream,因为它可能对某些人有所帮助,并且在一般情况下不会受到伤害? @arney 应该始终关闭所有资源,因为在最坏的情况下它会是无操作的,但在最好的情况下它会防止难以发现的错误。 我宁愿说,一般来说,如果你不关闭它,它会伤害你。从 Java 1.7 开始,这可以使用 <pre>try(InputStream in = new XxxInputStream(...) catch(Exception e) </pre> 自动处理,因为流实现了 <pre>AutoCloseable</pre>提供的流也可以这样做。【参考方案3】:

正如@Kayaman 所说,InputStream 是一个抽象类,close 方法没有在那里实现。如果你很好奇,你可以看到这个link,它在java.io.FileInputStream 的 openjdk 版本 8u40-b25 上播种了关闭方法,来自 GrepCode。

【讨论】:

没有实现 close 方法但主体为空

以上是关于InputStream.close() 有啥作用吗?的主要内容,如果未能解决你的问题,请参考以下文章

文件上传端点需要关闭InputStream吗?

Byteman JUnit Runner - 无法在自动关闭的 InputStream#close 上触发 IOException

Application.EnableVisualStyles() 有啥作用吗?

使用 RowsFragment 时,ObjectAdapter.setPresenterSelector 有啥作用吗?

这个函数有啥作用?与钳位值有关吗?

Hibernate - @Transactional 不起作用有啥特别的原因吗?