IO流关闭

public static void testClose() throws Exception{
	FileInputStream fi = new FileInputStream("F:\\test.txt");
	InputStreamReader reader = new InputStreamReader(fi,"GBK");
	BufferedReader br = new BufferedReader(reader);
	String line = null;
	while((line=br.readLine())!=null){
		System.out.println(line);
	}
	System.out.println("do close");//文件不能删除
	TimeUnit.SECONDS.sleep(30);
	br.close();
	System.out.println("BufferedReader close");//文件可以删除
	TimeUnit.SECONDS.sleep(30);
	reader.close();
	System.out.println("InputStreamReader close");
	TimeUnit.SECONDS.sleep(30);
	fi.close();
	System.out.println("FileInputStream close");
}

 流关闭时只需关闭最外层的,外层流关闭时依次会调用装饰在内部的流对象的关闭方法

public void close() throws IOException {
	synchronized (lock) {
		if (in == null)
			return;
		in.close();
		in = null;
		cb = null;
	}
}

 in为构造函数包装的流对象,例子中为InputStreamReader

public void close() throws IOException {
	sd.close();
}

 sd 为StreamDecoder对象,它包装了inputStream对象,即例子中的FileInputStream对象

public void close() throws IOException {
    synchronized (lock) {
        if (!isOpen)
            return;
        implClose();
        isOpen = false;
    }
}
void implClose() throws IOException {
    if (ch != null)
        ch.close();
    else
        in.close();
}

in 上例中为FileInputStream

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值