A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Jacky_Chen1990 高级黑马   /  2013-5-2 23:04  /  2570 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Jacky_Chen1990 于 2013-5-3 23:31 编辑

首先看一下代码如下:
  1. package com.itheima;

  2. import java.io.*;

  3. /**
  4. * 缓冲区的出现是为了提高流的操作效率而出现的。
  5. *
  6. * 所以在创建缓冲区之前,必须要先有流对象
  7. *
  8. * 该缓冲区中提供了一个跨平台的换行符newLine()
  9. *
  10. * @author Jacky_Chen
  11. *
  12. */
  13. public class BufferedWriterDemo {

  14.         /**
  15.          * @param args
  16.          */
  17.         public static void main(String[] args) {
  18.                 // TODO Auto-generated method stub
  19.                
  20.                 //创建一个字符写入流对象
  21.                 FileWriter fw = null;
  22.                 //为了提高字符写入流效率,加入了缓冲基础。
  23.                 //只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可。
  24.                 BufferedWriter bw = null;
  25.                
  26.                 try {
  27.                         fw = new FileWriter("bwDemo.txt");
  28.                         bw = new BufferedWriter(fw);
  29.                         
  30.                         bw.write("abced");
  31.                         bw.newLine(); //无论是windows还是linux下都会执行换行,如果使用\n\r在linux下将不会换行。
  32.                         bw.write("adfadsf");
  33.                 } catch(Exception e) {
  34.                         e.printStackTrace();
  35.                 } finally {
  36.                         if(bw != null) {
  37.                                 try {
  38.                                         bw.close();
  39.                                 }catch(Exception e){
  40.                                         e.printStackTrace();
  41.                                 }
  42.                                 
  43.                         }
  44.                 }
  45.                                 

  46.         }

  47. }
复制代码
在老师的视频中,说是关闭了bufferedWriter也就是关闭了FileWriter,但是我并不是特别的理解,即便bufferedWriter是承载着FileWriter的,但是bw关了,fw流不是依旧存在么?不需要关闭么?还望谁可以梳理下知识点哈。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 吴传淦 于 2013-5-2 23:22 编辑

我是这么理解的:BufferedWriter只是提高流效率并没有创建流,使用的是FileWriter的流
new FileWriter它才创建了流。
所以bufferedWriter的方法close()关闭的流就是new FileWriter创建的流。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
以下是BufferedWriter.java 源码文件,

构造函数为
public BufferedWriter(Writer out)
{
        this(out, defaultCharBufferSize);
}


public void close() throws IOException
{
        synchronized (lock)
        {
                if (out == null)
                {
                        return;
                }
                try
                {
                        flushBuffer();
                }
                finally
                {
                        out.close();    //fw = new FileWriter("bwDemo.txt")
                                             // bw = new BufferedWriter(fw)u在关闭缓冲区bw.close();时,实际上也隐含有fw.close();方法!,这个你只需记住就行!
                        out = null;
                        cb = null;
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
finally {

                        if(bw != null) {

                                try {

                                        bw.close();
                                        fw.writer("abc");//在这里你输出就会报错,应该是从这里看出关闭轮缓冲就是关闭流

                                }catch(Exception e){

                                        e.printStackTrace();

                                }

                                

                        }

                }

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
我懂了!,楼上几位答得都非常好,我要顶上去,让版主给你们加技术分!
回复 使用道具 举报
如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马