初学,BufferedInputStream是怎样起到缓冲作用的?不理解,为什么?

解决方案 »

  1.   

    缓冲主要是在创建时及时的创建了一个内部缓冲区数组。
    protected volatile byte buf[];
    自己可以看看源码。
    其次理解下装饰器模式的用法。这一章基本贯穿这个模式讲的。
      

  2.   

    非缓存的流,一次读取一个字节或字符。
    buffered运行设计一定大小的缓冲区,也就是一个缓冲区一个缓存区的读。
      

  3.   

    首先要知道什么是缓冲,buffering,如CPU和硬盘之间的关系,寄存器或内存就是作为缓冲,如果没有缓冲,当CPU要向硬盘存取数据时,只能直接存取,导致效率低下。
    比如总共要读取10个字符,每次用一个,那只能每次从硬盘读一个用一个,如果有缓冲,就能先直接缓冲10个,然后再从缓冲中读一个用一个,出于硬件条件等的天生受限,使用buffering会大大提高效率同样的道理也适用于BufferedInputStream,其是内建了缓冲数组:
    /**
         * The internal buffer array where the data is stored. When necessary,
         * it may be replaced by another array of
         * a different size.
         */
        protected volatile byte buf[];
    在BufferedInputStream创建时创建,用于buffer the input
      

  4.   

      Inputstream 是一根管道对进去,不停的读. 一根IO管道不停的流。   BufferInputStream  是先搞个小桶装着,装满了。再进行操作。一般最后要flash()一下。有可能最后一桶不是满的 。呵呵
      

  5.   


    直接用FileInputStream的read方法读一个字节数组,比如说read(byte[] b),能不能起到缓冲作用?和BufferedInputStream有什么区别?
      

  6.   

    一般是用BufferedInputStream外包FileInputStream来使用,所以单FileInputStream应不具备缓冲功能,比效率的话,可以自己做一个bench,比一下两者的性能
      

  7.   

    我也在学习IO。以下是我的理解。
    每个流理解成管道,FileInputStream从文件中读出来数据,它的效率低,因为是一个字节一个字节的读。
    如果你在这个小管道外面套一个大管道,这个大管道就是BufferedInputStream.具体写法是这样的:
    BufferedInputStream bis = new BufferedInputStream (fis); 这就是套在了小管道上了!
    你把它理解成一个小桶,一桶装满了倒出去,在装满,在倒出去,是不是效率高多了!
    希望对楼主有帮助!
      

  8.   

    不用缓冲流,一次只读一个字节或字符,有了缓冲流,一个读取一个缓冲区大小的内容(缓冲区大小可自己定义),速度比较快。打个比方,A屋子里有10个苹果,你要把它们拿到B屋子里去,你说你是一次只拿一个苹果快,还是把它们装进篮子里再往B屋子里放快?
      

  9.   


    FileInputStream有read(byte[] b)的方法,可以一下子读一个数组不是?与用缓冲流有什么区别?
      

  10.   


    FileInputStream有read(byte[] b)的方法,可以一下子读一个数组不是?与用缓冲流有什么区别?
      

  11.   


    FileInputStream有read(byte[] b)的方法,可以一下子读一个数组不是?与用缓冲流有什么区别?
      

  12.   

    他不是读一个数组,而是一个字节一个字节的将内容读入byte[]中,注意读和读入的区别
      

  13.   

         问个问题,为什么BufferedOutputStream要在Close后才会将字节写让到指定的文件中!Close后会清空缓存,是吧,那,这个缓存里的数据也就只能用一次是么?