先给一个文件输入流添加缓冲功能:
FileInputStream fis = new FileInputStream("data");
BufferedInputStream bis = new BufferedInputStream(fis);那么在第一次调用read()方法之前,BufferedInputStream类是已经将默认的8192字节大小的缓冲区填满了,还是当我们调用read方法后,这个类才将8192字节的buf填满?是不是只有当缓冲区的数据已经空了的时候,BufferedInputStream类才会从"data"这个文件中一次性地读入8192字节的数据放到缓冲区呢?BufferedInputStream

解决方案 »

  1.   

    1、第一次调用read的时候,才会去实际读取数据。
    2、是的。你可以查看jdk源码就清楚了。
      

  2.   

    查看api文档你会发现,这个类有个成员变量buf。而且是个byte数组。预定义大小是2048.当读取数据时,BufferedInputStream会先将buf填满;当使用read()方法时,是先读取buf中的数据,而不是直接读取数据,当buf中的数据不足时,BufferedInputStream才会再从数据来源中提取数据。