缓冲流关闭的是被其包装流的资源,这是BufferedWriter的源代码:
public BufferedWriter(Writer out) {
this(out, defaultCharBufferSize);
}
这是构造函数,再看看起close函数
public void close() throws IOException {
synchronized (lock) {
if (out == null) {
return;
}
try {
flushBuffer();
} finally {
out.close(); out = null;
cb = null;
}
}
}
看的出来但你先调用缓冲流之后它释放的就是被它包装之后流的资源,如果你释放之前就已经对其资源就像释放了,而且out 是!=null 要不然就不会报错了,我想找一下fos和osw的close源代码,可惜fos是调用的本地方法,没找着,只能这么推测了。
|