黑马程序员技术交流社区

标题: 关于FileWriter和BufferedWriter的问题? [打印本页]

作者: 昝文萌    时间: 2013-9-3 16:26
标题: 关于FileWriter和BufferedWriter的问题?
本帖最后由 昝文萌 于 2013-9-5 12:10 编辑
  1. FileWriter fw = new FileWriter("a.txt");
  2. fw.writer("abcdef");//这个是把数据写入流里面,只有刷新过之后才能写入硬盘!
复制代码
这不是也相当于一个缓冲区吗?写完一堆数据之后再刷新到硬盘!那么BufferedWriter这个也是缓冲
  1. BufferedWriter bufw = new BufferedWriter(fw);
  2. bufw.writer("abcdef");
复制代码
它们在底层的区别是什么?写到流里面和写到缓冲区里面有什么不同,写到流里面的数据是在哪存着的?求大神!



作者: 白磊    时间: 2013-9-3 17:07
其实对于这一块儿我也不是太清楚,但是我自己的理解呢就是:这个输入输出流是为了操作数据的进进出出而存在的一个对象。至于具体使用什么样的流(字符还是字节)那就要看你要操作的是什么素具;正如你这里的FileWriter ,它可以创建一个操作(输出)字符的流对象。这样就仅仅是要做这样的操作(输出数据)的第一步,也就是建了一条路而已,还没有到缓冲的那一步呢,FileWriter 的流对象它一次可以操作一个字符,而BufferedWriter只是先将这一个个的字符缓存在一个地方,然后他一次可以操作一行,这样效率就比较高了。
作者: 陈国柱    时间: 2013-9-5 01:10
底层应该都是一样的吧,毕竟是将FileWriter传入缓冲区,而缓冲区要结合流才可以使用,在流的基础上对流的功能进行了增强。写入到流里面的数据应该是在内存里面存着。我觉得在API里面说到的例子就很好说明了写入缓冲区和写入到流里面的区别,
PrintWriter out   = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
将缓冲 PrintWriter 对文件的输出。如果没有缓冲,则每次调用 print() 方法会导致将字符转换为字节,然后立即写入到文件,而这是极其低效的。





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