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();
- }
- }
复制代码
|