BufferedInputStream 作为缓冲流可以包在 FileInputStream 的外边,他们都有一个read()方法,但是这个方法 是以一个字节一个字节的形式从文件输出数据的,当将他们套在一起用BufferedInputStream的read()方法时,这个方法还是以一个字节一个字节的形式从文件输出数据,我们套一个BufferedInputStream是为了提高输出效率,但是这样似乎并没有提高啊,还是以一个字节的形式来输出,并没有在套了这个管子之后变得可以用其他的形式来输出了,(例如以一个字符的形式来输出等等),那他的缓冲功能又是怎么回事呢?又为什么说他是一个带"小桶"的流呢,他的"小桶"似乎并没有发挥作用啊
流 java
流 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数组上,供其他方法使用,空间换时间,如果没有这个缓冲,必须再从输入流中按字节读取,时间效率将大大降低。
通过减少与文件的I/O操作(如果文件全部加载到内存中,则需要与其它操作系统进程交互,如果没有,则需通过操作系统与磁盘交互),从而提高了读取效率;如果你用过缓冲的write()时就会有体会,比如你用buffer,当你写了一百个字节时,程序突然崩溃,这时你去文件中查看,可能只有几个字节;
但如果不用buffer的话,即使突然崩溃,你写了多少,文件中就有多少;当然,buffer也有一个flush的方法,就是手动强制将buffer的内容立即写入文件;