黑马程序员技术交流社区

标题: 关于BufferedWriter [打印本页]

作者: 王建旺    时间: 2013-3-28 13:10
标题: 关于BufferedWriter
本帖最后由 王建旺 于 2013-3-28 14:22 编辑

import java.io.*;

class  BufferedWriterDemo
{
        public static void main(String[] args)
        {
                FileWriter fw = null;
                BufferedWriter bufw = null;
                try
                {
                        fw = new FileWriter("demo.txt");
                        bufw = new BufferedWriter(fw);

                        bufw.write("dhhghd");
                        bufw.flush();
                }
                catch (IOException e)
                {
                        throw new RuntimeException("读写失败");
                }
                finally
                {
                        try
                        {
                                if(bufw!=null)
                                        bufw.close();
                        }
                        catch (IOException e)
                        {
                                throw new RuntimeException("写入关闭失败");
                        }
                }
        }
}
这里面的bufw.flush()可以不写吗,或者是要write多次的时候,是不是也可以不用写,数据也会写入到demo.txt中























作者: yufeng47    时间: 2013-3-28 13:27
在字符流中:bufw.write()只是将数据写入到了缓冲区中,必须要bufw.flush()刷新缓冲区,不然数据写入不到指定的文件中。字符流在写入数据时底层还是会调用字节流,然后才能将数据写入文件中,但是字节流是不能直接操作字符的。
对于字节流:因为字节流操作的数据是字节表现形式的,所以在使用带缓冲区的BufferedOutputStream对象时,可以不刷新,但是刷新也可以,同样会把数据写入到指定文件中。
作者: 王建旺    时间: 2013-3-28 13:32
yufeng47 发表于 2013-3-28 13:27
在字符流中:bufw.write()只是将数据写入到了缓冲区中,必须要bufw.flush()刷新缓冲区,不然数据写入不到指 ...

那个close不是也有刷新的功能吗,当我把全部数据写入到缓冲区时,最后用close进行刷新不是也可以吗
作者: yufeng47    时间: 2013-3-28 13:46
王建旺 发表于 2013-3-28 13:32
那个close不是也有刷新的功能吗,当我把全部数据写入到缓冲区时,最后用close进行刷新不是也可以吗 ...

缓冲区中你每写入一行数控,就会把前一行你写入的数据覆盖掉,必须在循环体中刷新,若你用close,只能刷新最后一条语句。若仅仅录入一行数据,不用flush也行,不存在覆盖,但是还是建议你使用flush,按照java编码规范来,养成一个良好的习惯。
作者: 王杰123    时间: 2013-3-28 13:53
在实际开发项目,不会是bufw.write("dhhghd");  写6个字符的, 可以是处理亿万次数据的,如果不bufw.flush(); 势必会影响系统性能。建议使用flush,按照java编码规范来,养成一个良好的习惯。
作者: 王建旺    时间: 2013-3-28 14:20
yufeng47 发表于 2013-3-28 13:46
缓冲区中你每写入一行数控,就会把前一行你写入的数据覆盖掉,必须在循环体中刷新,若你用close,只能刷 ...

明白了,thank you




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