Java:Closing Streams:Streams即使在close()之后也不为NULL

Java:Closing Streams:Streams即使在close()之后也不为NULL,java,Java,在我的最后一句中,我清理了所有的流,例如 finally // Clean up { if (os != null) { try { os.close(); } catch (IOException ioe) {

在我的最后一句中,我清理了所有的流,例如

            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);
                    }
                }
但我看到,即使在关闭之后,流仍然保持非空。那么,检查NULL是否错误?或者我没有看到
close
的结果?

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

引用将保持非空,直到您将其设置为空,但流的状态为关闭,这意味着您不能再使用它。

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


引用将保持非NULL,直到您将其设置为NULL,但是流的状态是关闭的,这意味着您不能再使用它了。

您使用的是Java 7吗?如果是这样的话,看看try with resources,那么您甚至不必担心关闭流,因为它将为您处理(只要它们实现了autoclosable,那么像BufferedInputStream这样的大多数东西您都在使用Java 7吗?如果是这样的话,请查看资源试用,那么您甚至不必担心关闭流,因为它将为您处理。)(只要他们实现autoclosable,像BufferedInputStream这样的大多数东西都有办法检查它是否关闭?这应该作为标准吗?@geneb。根据这些帖子:你将看不到……但close函数永远不会抛出异常。你可以说:“os=null;is=null”关闭后使引用为空。但如果函数在关闭后完成,则不需要该函数。您的代码仍然很好;)有没有办法检查它是否关闭?是否应该以此作为标准?@geneb。根据这些帖子:你将看不到……但是关闭函数永远不会抛出异常。你可以说:“os=null;Is=null”关闭后使引用为空。但如果函数在关闭后完成,则不需要该函数。您的代码仍然很好;)