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”关闭后使引用为空。但如果函数在关闭后完成,则不需要该函数。您的代码仍然很好;)