黑马程序员技术交流社区

标题: 关闭io中的缓冲区是否就直接关闭对应的流? [打印本页]

作者: pillar    时间: 2014-11-19 18:27
标题: 关闭io中的缓冲区是否就直接关闭对应的流?
  1. FileWriter fw = new FileWriter("buf.txt");
  2.                
  3.                 BufferedWriter bw = new BufferedWriter(fw);
  4.                
  5.                 bw.write("abcdefg");
  6.                 bw.flush();
  7.        
  8.                 bw.close();
复制代码
关闭缓冲区后,就直接把写入流也关闭了?就不用再fw.close()了?

作者: wf111sxwf    时间: 2014-11-19 19:05
缓冲区的close方法就是调用流的close方法 那么必然不用再关闭流了。建议撸主多看看源码
作者: 20140829    时间: 2014-11-19 19:52
因为对象fw在缓冲区中,所以关闭缓冲区后fw也就自然关闭了。
作者: pillar    时间: 2014-11-19 20:18
wf111sxwf 发表于 2014-11-19 19:05
缓冲区的close方法就是调用流的close方法 那么必然不用再关闭流了。建议撸主多看看源码 ...

对对对,应该看看源码。谢谢你!你学得不错哦!
作者: kakasa    时间: 2014-11-19 23:50
嗯是  缓冲器的关闭动作就是调用流的close.   视频里是这么说的
作者: 曾勇    时间: 2014-11-20 00:02
恩,是的,其实关闭缓冲区就是在关闭缓冲区里的流,调用的方法就是流的关闭方法
作者: 丑小子799    时间: 2014-11-22 09:10
关闭缓冲流后,写入流也就关了,视频上老师这么说的
作者: pillar    时间: 2014-11-22 09:24
嗯,后来我接着看视频,也明白透了,缓冲流就是对流进行了装饰,对其进行了功能增强,但实际上还是在调用流的一些方法。
作者: quick3g    时间: 2014-12-3 19:35
//jdk  BufferedWriter  close()源码
public void close() throws IOException {
        synchronized (lock) {
            if (out == null) {
                return;
            }
            try {
                flushBuffer();//close方法包含flush,所以close之前没必要flush啦。
            } finally {
                out.close();//调用write对象的close方法。
                out = null;
                cb = null;
            }
        }
    }
作者: pillar    时间: 2014-12-4 12:06
quick3g 发表于 2014-12-3 19:35
//jdk  BufferedWriter  close()源码
public void close() throws IOException {
        synchronized (lo ...

谢谢你贴出来




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2