读书人

FileInputStream跟BufferedInputStream

发布时间: 2012-10-27 10:42:26 作者: rapoo

FileInputStream和BufferedInputStream

?

万恶的javaeye,编辑器能不能优化下,每次修改样式都变形了。

?

FileInputStream属于数据源

BufferedInputStream属于FileInputStream的一个装饰

?

?

BufferedInputStream?有个内部缓冲区当read时会先把缓冲区填满,然后下次读取是直接从缓冲区读取。当读取的位置大于缓冲区时会再一次加载缓冲区。

?

read()和read(byte[]?buf,int?off, int?len)处理方式一样,区别在于后者一次返回多个数据,但是同样都是先放入缓冲区,然后再读取。

?????? System.out.println("io end"+new Date());

??? }

?

文件大概有1G,用buffer大概用了20秒,用原始方式等了1分钟还没完,直接强制终止。

1 楼 xuhang1128 2011-12-28 可是如果把ioTest方法里面的缓冲区调大,比如和BufferedInputStream里面默认的缓冲区一样大, byte[] buffer = new byte[1024*8];好像速度也差不多啊?咋回事啊 2 楼 benx 2011-12-31 xuhang1128 写道可是如果把ioTest方法里面的缓冲区调大,比如和BufferedInputStream里面默认的缓冲区一样大, byte[] buffer = new byte[1024*8];好像速度也差不多啊?咋回事啊

BufferedInputStream的默认缓冲区是8192(4K),说明每次物理读取4K,然后FileInputStream的每次read,如果缓冲区有就从缓冲区读,没有就开始物理读,fill buffer

如果FileInputStream 的read(byte[] buffer) 的buffer大小为8192相当于每次物理读取8192,所以速度和BufferInputStream一致的,因为两个的物理读次数一致。

他们的不同点就是BufferedInputStream如果需要物理读,那么默认一次读取N个数据到buffer,然后以后的每次read(byte b)都是先从buffer读取,buffer没有了就开始物理读。

读书人网 >编程

热点推荐