class="java">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