黑马程序员技术交流社区

标题: IO流中缓冲流的个人理解 [打印本页]

作者: 优乐    时间: 2014-8-24 23:13
标题: IO流中缓冲流的个人理解
缓冲流:他的读写是多次调用底层流对数据源的读写方法(取决于缓存的大小),我们再对缓存进行读写操作,而不是对数据源本身读写当缓存中没有数据的时候就会再次调用底层流,将读取的字节或字符存储在缓存中


下面是代码验证
  1. public class BufferedReaderDemo {
  2.        
  3.         public static void main(String[] args) throws IOException{
  4.                
  5.                 writer();
  6.                 reader(2);//结果1---3---2---4---6
  7.                 /*
  8.                  * 结果分析:这里缓存的大小设置为2个字符
  9.                  * 第一次是缓冲流read(),这里设置缓冲流的缓冲大小为2个字符
  10.                  * 所以相当于调用2次FileReader底层流的read()方法,就将1 2放到缓存中去了------s1
  11.                  *
  12.                  * 第一次调用FileReader底层流的read()方法的时候,前面调用了2次FileReader的read(),那么这次指向3------c1
  13.                  *
  14.                  * 第二次调用缓冲流read(),是从缓冲中取数据 也就是2了------s2
  15.                  *
  16.                  * 第三次调用缓冲流read(),前面调用了3次FileReader的read(),缓存中没有数据了,所以又调用2次FileReader底层流的read()方法
  17.                  * 所以将 4 5放到缓存中,此次指向4------s3
  18.                  *
  19.                  * 第二次调用FileReader底层流的read()方法的时候,前面调用了5次FileReader的read(),所以这次指向 6------c2
  20.                  */
  21.         }
  22.         //写入一个字符串到文件中
  23.         public static void writer() throws IOException{
  24.                 String msg="123456789";
  25.                 FileWriter fw=new FileWriter("Demo.txt");
  26.                 fw.write(msg);
  27.                 fw.close();
  28.         }
  29.         //分别用缓存流和他的底层流(就是他构造函数中的参数)对数据进行读取
  30.         public static void reader(int size) throws IOException{
  31.                
  32.                 FileReader in=new FileReader("Demo.txt");
  33.                 BufferedReader br=new BufferedReader(in,size);
  34.                 char s1=(char)br.read();
  35.                 char c1=(char)in.read();
  36.                 char s2=(char)br.read();
  37.                 char s3=(char)br.read();
  38.                 char c2=(char)in.read();
  39.                 System.out.println(s1+"---"+c1+"---"+s2+"---"+s3+"---"+c2);
  40.                 br.close();
  41.         }
  42. }
复制代码

以上是个人理解,如果有什么地方不对,还请指点一下








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