不一样。is.close();是手动的关闭输入流,它将当前缓存中内容输出完毕,并且关闭相关占用的资源,而InputStream is = null; 只是把输入流对象的引用释放掉了。有些数据还在缓存里,并没有真正写进文件,最好自己手动关,把缓存的数据都写进文件,而且如果你不关的话,可能别的程序就不能访问这个文件了,关了也节省资源,良好的习惯
InputStream is = null;只是引用置null成为可被垃圾回收的对象,但占用的资源还在,而close则是释放所占用的资源。所以有些资源必须由程序员明确调用某方法来释放,否则可能一直会占用内存。就像Linux系统子进程,退出以后如果不被回收,会成为僵尸进程。
查看了流的close源码,最终会调用到操作系统提供的接口close(int fd)函数,每个打开的流都和一个文件描述符fd对应,这个函数的作用是:closes a file descriptor, so that it no longer refers to any file and may be reused.很显然这种功能是将一个引用置null做不到的。
只是把输入流对象的引用释放掉了。有些数据还在缓存里,并没有真正写进文件,最好自己手动关,把缓存的数据都写进文件,而且如果你不关的话,可能别的程序就不能访问这个文件了,关了也节省资源,良好的习惯
URL url = null;
InputStream is = null;
try {
inputPath = URLDecoder.decode(inputPath, "UTF-8");
url = new URL(inputPath);
is = url.openStream();
} catch (Exception ex) {
ex.printStackTrace();
}
/**finally {
try {
//if (is != null)
//is.close();
} catch (Exception e) {
e.printStackTrace();
}
}*/
return is;
}
如果是这个代码,关闭了就无法返回资源了?这个要怎么处理呢?