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

根据official documentation

公共无效关闭() 抛出 IOException

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

InputStream 的 close 方法什么都不做。

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

【问题讨论】:

  • @Saif ... 在它下面说它没有。

标签: java inputstream


【解决方案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 方法但主体为空
    猜你喜欢
    • 2010-10-13
    • 1970-01-01
    • 2012-11-27
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多