| BufferedInputStream是对缓冲区进行操作,缓冲去就是一个字节数组 他的机制是,通过底层流(如:FileInputStream)的read()方法,将数组读满
 然后读取的是数组里面的,也就是内存
 而FileInputStream是调用windows的资源对数据源直接进行读取,通俗的说是对硬盘操作
 那么是对内存读快还是对硬盘读快点呢
 
 下面是代码测试证明缓冲流不是直接读取源文件,用的是BufferedReader,我就懒得用BufferedInputStream了,你可以自己去试试!!!
 
 复制代码public class BufferedReaderDemo {
        
        public static void main(String[] args) throws IOException{
                
                writer();
                reader(2);//结果1---3---2---4---6
                /*
                 * 结果分析:这里缓存的大小设置为2个字符
                 * 第一次是缓冲流read(),这里设置缓冲流的缓冲大小为2个字符
                 * 所以相当于调用2次FileReader底层流的read()方法,就将1 2放到缓存中去了------s1
                 * 
                 * 第一次调用FileReader底层流的read()方法的时候,前面调用了2次FileReader的read(),那么这次指向3------c1
                 * 
                 * 第二次调用缓冲流read(),是从缓冲中取数据 也就是2了------s2
                 * 
                 * 第三次调用缓冲流read(),前面调用了3次FileReader的read(),缓存中没有数据了,所以又调用2次FileReader底层流的read()方法
                 * 所以将 4 5放到缓存中,此次指向4------s3
                 * 
                 * 第二次调用FileReader底层流的read()方法的时候,前面调用了5次FileReader的read(),所以这次指向 6------c2
                 */
        }
        //写入一个字符串到文件中
        public static void writer() throws IOException{
                String msg="123456789";
                FileWriter fw=new FileWriter("Demo.txt");
                fw.write(msg);
                fw.close();
        }
        //分别用缓存流和他的底层流(就是他构造函数中的参数)对数据进行读取
        public static void reader(int size) throws IOException{
                
                FileReader in=new FileReader("Demo.txt");
                BufferedReader br=new BufferedReader(in,size);
                char s1=(char)br.read();
                char c1=(char)in.read();
                char s2=(char)br.read();
                char s3=(char)br.read();
                char c2=(char)in.read();
                System.out.println(s1+"---"+c1+"---"+s2+"---"+s3+"---"+c2);
                br.close();
        }
}
 |