【问题标题】:Java: Closing Streams: Streams non-NULL even after close()Java:关闭流:即使在 close() 之后流也非 NULL
【发布时间】:2017-02-16 13:58:21
【问题描述】:

在我的 finally 子句中,我清理了所有流,例如,

            finally // Clean up 
            {
                if (os != null) {
                    try {
                        os.close();
                    }
                    catch (IOException ioe) {
                        logger.warn("Failed to close outputStream", ioe);
                    }
                }
                if (is != null) {
                    try {
                        is.close();
                    }
                    catch (IOException ioe) {
                        logger.warn("Failed to close inputStream", ioe);
                    }
                }

但我看到 Streams 即使在关闭后仍然保持非 NULL。那么检查NULL是错误的吗?还是我看不到close 的结果?

【问题讨论】:

  • 您使用的是 Java 7 吗?如果是这样,请查看 try-with-resources,然后您甚至不必担心关闭流,因为它会为您处理(只要它们实现自动关闭,像 BufferedInputStream 这样的大多数东西都会这样做

标签: java


【解决方案1】:

流“对象”是对流实例的引用。流是否打开是其状态的一部分。 close 函数是在对象状态下运行的函数,因此不会影响对它的引用。

在您将其设置为 null 之前,该引用将保持非 NULL,但流的状态是关闭的,这意味着您不能再使用它。

【讨论】:

  • 有没有办法检查它是否已关闭?那应该作为标准吗?
  • @geneb。根据这些帖子:stackoverflow.com/questions/8655901/…stackoverflow.com/questions/981196/… 你将看不到......但是关闭函数永远不会抛出异常。您可以在关闭后说:“os=null; is=null”以使引用为空。但如果函数在关闭后完成,则不需要。你的代码很好;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
  • 2012-06-18
相关资源
最近更新 更多