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】:InputStream
的 close()
方法什么也不做。 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() 有啥作用吗?的主要内容,如果未能解决你的问题,请参考以下文章
Byteman JUnit Runner - 无法在自动关闭的 InputStream#close 上触发 IOException
Application.EnableVisualStyles() 有啥作用吗?