首先要知道什么是缓冲,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
protected volatile byte buf[];
自己可以看看源码。
其次理解下装饰器模式的用法。这一章基本贯穿这个模式讲的。
buffered运行设计一定大小的缓冲区,也就是一个缓冲区一个缓存区的读。
比如总共要读取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
直接用FileInputStream的read方法读一个字节数组,比如说read(byte[] b),能不能起到缓冲作用?和BufferedInputStream有什么区别?
每个流理解成管道,FileInputStream从文件中读出来数据,它的效率低,因为是一个字节一个字节的读。
如果你在这个小管道外面套一个大管道,这个大管道就是BufferedInputStream.具体写法是这样的:
BufferedInputStream bis = new BufferedInputStream (fis); 这就是套在了小管道上了!
你把它理解成一个小桶,一桶装满了倒出去,在装满,在倒出去,是不是效率高多了!
希望对楼主有帮助!
FileInputStream有read(byte[] b)的方法,可以一下子读一个数组不是?与用缓冲流有什么区别?
FileInputStream有read(byte[] b)的方法,可以一下子读一个数组不是?与用缓冲流有什么区别?
FileInputStream有read(byte[] b)的方法,可以一下子读一个数组不是?与用缓冲流有什么区别?