从品牌网站建设到网络营销策划,从策略到执行的一站式服务
如下例子代码:
从网站建设到定制行业解决方案,为提供网站设计制作、成都做网站服务体系,各种行业企业客户提供网站建设解决方案,助力业务快速发展。创新互联公司将不断加快创新步伐,提供优质的建站服务。
FileInputStream is = new FileInputStream(".");
BufferedInputStream bis = new BufferedInputStream(is);
bis.close();
从设计模式上看:
java.io.BufferedInputStream是java.io.InputStream的装饰类。
BufferedInputStream装饰一个 InputStream 使之具有缓冲功能,is要关闭只需要调用最终被装饰出的对象的 close()方法即可,因为它最终会调用真正数据源对象的 close()方法。
BufferedInputStream的close方法中对InputStream进行了关闭,下面是jdk中附带的源代码:
java.io.BufferedInputStream的api:
close
public void close()throws IOException 关闭此输入流并释放与该流关联的所有系统资源。
因此,可以只调用外层流的close方法关闭其装饰的内层流,验证例子:
public static void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream("d:\\a.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
BufferedWriter bw = new BufferedWriter(osw);
bw.write("java IO close test");
bw.close();
}
验证ok
是的,你的new FileReader(file)是一个匿名对象。
JVM中对于那些打开了没有关闭的IO文件流,会在不再被使用的情况下,等到下次做Full GC的时候把他们全部回收,尽量少使用这种写法。文章来自:
如果 in == null,就说明 in这个引用所指向的对象还没有被创建,自然 in.close()也就不可能被执行,而且会报异常。我是这样想的,程序中 如果你先声明变量
InputStream(或者其他流类型) in = null;
然后执行其他语句,再 in = new 、、、、
在in new之前其他语句出exception,这时流没有被打开,也就无需关闭,如果不判断if(null != in) 硬要关闭in就出exception
另外你的代码按如下写会更合理:
if(null != in){
try{
in.flush();
in.close();
in = null;
}
catch(IOExection e){};
}
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图