BufferedInputStream 作为缓冲流可以包在 FileInputStream 的外边,他们都有一个read()方法,但是这个方法 是以一个字节一个字节的形式从文件输出数据的,当将他们套在一起用BufferedInputStream的read()方法时,这个方法还是以一个字节一个字节的形式从文件输出数据,我们套一个BufferedInputStream是为了提高输出效率,但是这样似乎并没有提高啊,还是以一个字节的形式来输出,并没有在套了这个管子之后变得可以用其他的形式来输出了,(例如以一个字符的形式来输出等等),那他的缓冲功能又是怎么回事呢?又为什么说他是一个带"小桶"的流呢,他的"小桶"似乎并没有发挥作用啊
 流    java   

解决方案 »

  1.   

    BufferdInputStream的功能:使用它可以防止每次读取都得进行实际的写操作。代表"使用缓冲区"-《Think in Java》 楼主看着办吧
      

  2.   

    /**
         * 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所谓的小桶了,Buffered就主要体现在这个小桶上
    所有的缓冲数据都缓存在这个byte数组上,供其他方法使用,空间换时间,如果没有这个缓冲,必须再从输入流中按字节读取,时间效率将大大降低。
      

  3.   

    缓冲的意思就是说你调用read()时,可能读取一个字节,但JAVA程序本身和文件的交互则不是这样的,在你读第一个字节的时候,JAVA程序其实从文件中已经读取了一定数量的字节(默认好像是8K),所以你在读第二个字节的时候,实际上已经不用再通过I/O从文件中读了;
    通过减少与文件的I/O操作(如果文件全部加载到内存中,则需要与其它操作系统进程交互,如果没有,则需通过操作系统与磁盘交互),从而提高了读取效率;如果你用过缓冲的write()时就会有体会,比如你用buffer,当你写了一百个字节时,程序突然崩溃,这时你去文件中查看,可能只有几个字节;
    但如果不用buffer的话,即使突然崩溃,你写了多少,文件中就有多少;当然,buffer也有一个flush的方法,就是手动强制将buffer的内容立即写入文件;