黑马程序员技术交流社区

标题: 关于io问题 [打印本页]

作者: 马新乐    时间: 2011-12-29 02:16
标题: 关于io问题
FileWriter fw=new FileWriter("buf.txt");
可以用fw.close();关闭
写缓冲区的时候关闭就直接把fw.close()给省略了,为什么?两者关闭有什么区别?
作者: 闫江龙    时间: 2011-12-29 03:04
BufferedWrite bufw()=new BufferedWriter(new FileWriter("buf.txt");)
关闭缓冲区 就是在关闭缓冲区里的流对象 其实就是把new FileWriter("buf.txt")给关掉了


作者: 刘基军    时间: 2011-12-29 10:50
本帖最后由 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.         }
复制代码

作者: 林铁柱    时间: 2011-12-29 11:12
因為真正在進行讀寫操作的是緩衝區裏面的流對象,而不是緩衝區
作者: 六期刘健    时间: 2011-12-29 11:45
本帖最后由 六期刘健 于 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一样
作者: 周吉明    时间: 2011-12-29 12:29
缓冲区关闭其实就是在关闭缓冲区里的流对象,功能一样。我个人理解:举例说,冰箱是缓冲区,冰箱里的灯是流对象,打开冰箱后可以用手按灯的开关,关闭冰箱里的灯(即fw.close()),当然你关闭冰箱时(关闭缓冲区),冰箱里的灯就会自动关闭(流对象关闭)。不知例子举得是否恰当,以上是只是个人理解。
作者: 刘健    时间: 2011-12-29 15:16
就像是水龙头和水闸一样,fw.close就是水龙头,缓冲区就是水闸,关了水闸当然水龙头没水,也就相当于关闭了
作者: 大梅    时间: 2011-12-29 20:52
学这个的时候,我一直怀疑缓冲区的close()方法是不是调用了流的close()方法。
作者: 陈浩    时间: 2011-12-29 21:25
BufferedWriter 是FileWriter的装饰类,在写缓冲区时调用的其实就是流资源,关闭BufferedWriter 对象其实就是相当于关闭了流对象,所以相应的流对象关闭动作可省略。
作者: 刘明瑞    时间: 2012-1-11 15:26
缓冲区对象其实还是在用FileWriter对象来进行实际操作的,只不过上面多加了点功能。关了缓冲区就关了流资源的了。




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