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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马新乐 黑马帝   /  2011-12-29 02:16  /  3251 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

FileWriter fw=new FileWriter("buf.txt");
可以用fw.close();关闭
写缓冲区的时候关闭就直接把fw.close()给省略了,为什么?两者关闭有什么区别?

9 个回复

倒序浏览
BufferedWrite bufw()=new BufferedWriter(new FileWriter("buf.txt");)
关闭缓冲区 就是在关闭缓冲区里的流对象 其实就是把new FileWriter("buf.txt")给关掉了

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
本帖最后由 monghuan 于 2011-12-29 10:52 编辑

查看jdk中的\src.zip\java\io\BufferedReader源代码的close()方法:(其中in.close()就是指你讲的fw.close())
  1.     public void close() throws IOException {
  2.         synchronized (lock) {
  3.             if (in == null)
  4.                 return;
  5.             in.close();            
  6.             in = null;
  7.             cb = null;
  8.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
因為真正在進行讀寫操作的是緩衝區裏面的流對象,而不是緩衝區
回复 使用道具 举报
本帖最后由 六期刘健 于 2011-12-29 11:46 编辑

/*
写一个自己的BufferedReader()
和他的方法readLine();

*/
import java.io.*;
class MyBuff
{
     private FileReader fr;
         MyBuff(FileReader fr){
                 this.fr=fr;
         }

         public String MyreadLine()throws IOException
        {
             StringBuilder sb=new StringBuilder();
                 int i=0;
             while((i=fr.read())!=-1){
                     
                         if(i=='\r')
                                  continue;
                         if(i=='\n')
                                 return sb.toString();
             else
                                 sb.append((char)i);
                 }
                 return null;

         
         }
         public void Myclose()throws IOException
        {
           fr.close();
         }

          
}

class MyBuffered
{
        public static void main(String[] args) throws IOException
        {
        FileReader fr=new FileReader("ceshi.java");
                MyBuff mb=new MyBuff(fr);
                String s="";
        while((s=mb.MyreadLine())!=null){
                System.out.println(s);
                }

                mb.Myclose();
               
        }
}
这是自己写的缓冲区方法!!缓冲区方法直接把FileReader关闭了道理和Filewriter一样

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
缓冲区关闭其实就是在关闭缓冲区里的流对象,功能一样。我个人理解:举例说,冰箱是缓冲区,冰箱里的灯是流对象,打开冰箱后可以用手按灯的开关,关闭冰箱里的灯(即fw.close()),当然你关闭冰箱时(关闭缓冲区),冰箱里的灯就会自动关闭(流对象关闭)。不知例子举得是否恰当,以上是只是个人理解。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
刘健 黑马帝 2011-12-29 15:16:49
7#
就像是水龙头和水闸一样,fw.close就是水龙头,缓冲区就是水闸,关了水闸当然水龙头没水,也就相当于关闭了
回复 使用道具 举报
大梅 黑马帝 2011-12-29 20:52:56
8#
学这个的时候,我一直怀疑缓冲区的close()方法是不是调用了流的close()方法。
回复 使用道具 举报
陈浩 黑马帝 2011-12-29 21:25:49
9#
BufferedWriter 是FileWriter的装饰类,在写缓冲区时调用的其实就是流资源,关闭BufferedWriter 对象其实就是相当于关闭了流对象,所以相应的流对象关闭动作可省略。
回复 使用道具 举报
缓冲区对象其实还是在用FileWriter对象来进行实际操作的,只不过上面多加了点功能。关了缓冲区就关了流资源的了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马