黑马程序员技术交流社区

标题: 关于关闭流的问题 [打印本页]

作者: Jacky_Chen1990    时间: 2013-5-2 23:04
标题: 关于关闭流的问题
本帖最后由 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流不是依旧存在么?不需要关闭么?还望谁可以梳理下知识点哈。

作者: 吴传淦    时间: 2013-5-2 23:20
本帖最后由 吴传淦 于 2013-5-2 23:22 编辑

我是这么理解的:BufferedWriter只是提高流效率并没有创建流,使用的是FileWriter的流
new FileWriter它才创建了流。
所以bufferedWriter的方法close()关闭的流就是new FileWriter创建的流。
作者: strawberry2013    时间: 2013-5-2 23:25
以下是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;
                }
        }
}

作者: 本人已死    时间: 2013-5-2 23:27
finally {

                        if(bw != null) {

                                try {

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

                                }catch(Exception e){

                                        e.printStackTrace();

                                }

                                

                        }

                }


作者: Jacky_Chen1990    时间: 2013-5-3 14:01
我懂了!,楼上几位答得都非常好,我要顶上去,让版主给你们加技术分!
作者: 黄玉昆    时间: 2013-5-3 22:18
如果问题已解决,请将分类改为已解决,谢谢




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