日期:2014-05-20  浏览次数:20832 次

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

------解决方案--------------------
BufferdInputStream的功能:使用它可以防止每次读取都得进行实际的写操作。代表"使用缓冲区"-《Think in Java》 楼主看着办吧
------解决方案--------------------
/**
     * 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数组上,供其他方法使用,空间换时间,如果没有这个缓冲,必须再从输入流中按字节读取,时间效率将大大降低。
------解决方案--------------------
小桶是先装满了在读进来 区别于一个字节一个字节读 只作为参考
------解决方案--------------------
缓冲的意思是先把数据(二进制数据)存到一个地方,当别人需要时,直接从这个存储仓库取,不用一个字节一个字节的传输。
------解决方案--------------------
缓冲的意思就是说你调用read()时,可能读取一个字节,但JAVA程序本身和文件的交互则不是这样的,在你读第一个字节的时候,JAVA程序其实从文件中已经读取了一定数量的字节(默认好像是8K),所以你在读第二个字节的时候,实际上已经不用再通过I/O从文件中读了;
通过减少与文件的I/O操作(如果文件全部加载到内存中,则需要与其它操作系统进程交互,如果没有,则需通过操作系统与磁盘交互),从而提高了读取效率;

如果你用过缓冲的write()时就会有体会,比如你用buffer,当你写了一百个字节时,程序突然崩溃,这时你去文件中查看,可能只有几个字节;
但如果不用buffer的话,即使突然崩溃,你写了多少,文件中就有多少;

当然,buffer也有一个flush的方法,就是手动强制将buffer的内容立即写入文件;