黑马程序员技术交流社区

标题: 关于缓冲区的问题 [打印本页]

作者: 乔九    时间: 2013-2-24 18:24
标题: 关于缓冲区的问题
package com.itcast;
import java.io.*;
public class IODem {

        /**
         * @param args
         */
        public static void main(String[] args)throws IOException {
                // TODO Auto-generated method stub
                FileWriter fw1=new FileWriter("1.txt");
                fw1.write("jalksajglk");
                fw1.flush();
               
               

        }

}此程序在运行的时候系统不是已经建立了缓冲区了吗,怎么在后面的视频中又说到BufferWriter
作者: 李挺    时间: 2013-2-24 18:26
本帖最后由 李挺 于 2013-2-24 18:51 编辑

错误了,编辑掉
作者: 王钊    时间: 2013-2-24 18:50
FileWriter确实存在缓冲区。
我翻阅了自己的技术博客,记录过
BufferedWriter提供带缓冲的字符流(实际上FileWriter也带缓冲区,BufferedWriter比FileWriter默认的缓冲区要大,并且效率要高)。
而且毕老师上课也说过,你可以放心用。

作者: 冯佩    时间: 2013-2-24 18:53
FileWriter只是个字符输入流,BufferedWriter将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入,所以BufferedWriter才是高效的缓冲技术,该类有个跨平台的newLine()方法。FileWriter是有flush()方法的,因为它继承的父类Writer中有。
作者: 王宝生    时间: 2013-2-24 20:12
     首先你应明白这里的缓冲区指i的是什么 ,有时候在不同的上下文中会有不同的含义。从我们程序员的角度来看,缓冲区其实就是个数组,有时我们显示的指定数组的大小,有时可以使用默认的大小(BufferWriter).
     以后在磁盘和内存中进行数据传输时,就以这个缓冲区的大小来传送数据。举个例子,即使我们只从磁盘读取一个字节,那么操作系统也会从磁盘中一次性的读取4096个字节到这个缓冲区,以后进行读操作就会使用这个缓冲区的内容,而不必再进行磁盘访问了(因为访问磁盘的开销很大,访问一个磁盘的时间要好多个时钟周期)。
     那么,因此不管是FileWrite还是什么Buffer....这样的类,他们内部肯定都有一个缓冲区,也就是一个数组。
     希望你能明白




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