解决方案 »
- hibernate引包错误
- 多线程并发爬虫问题HttpClient的MultiThreadedHttpConnectionManager
- JOptionPane.showMessageDialog问题
- Servlet.service() for servlet action threw exception
- 防止外链/过滤非法地址提交动作,有什么好方法控制
- 真地想要structs的中文资料
- struts 中极难解决的问题!!
- 对于一个项目如何选择是使用JSF还是使用struts???
- 大家来看看这是什么问题?(急,在线等)
- 用JAVA画公司的组织结构图
- Velocity不能读取Action中List
- 哪位大神能帮我把这c#代码该为java的,要能在eclispe上运行。能把功能再添复杂点就更好了,注释最好详细点。谢谢了
BufferedInputStream是套在某个其他的InputStream外,起着缓存的功能,用来改善里面那个InputStream的性能(如果可能的话),它自己不能脱离里面那个单独存在。FileInputStream是读取一个文件来作InputStream。所以你可以把BufferedInputStream套在FileInputStream外,来改善FileInputStream的性能。
FileInputStream与BufferedInputStream区别:
FileInputStream是字节流,BufferedInputStream是字节缓冲流,使用BufferedInputStream读资源比FileInputStream读取资源的效率高(BufferedInputStream的read方法会读取尽可能多的字节),且FileInputStream对象的read方法会出现阻塞;
if (len >= getBufIfOpen().length && pos < 0) {
return getInIfOpen().read(b, off, len);
}
从上面的代码看,在BufferedInputStream调用read的时候,如果长度大于缓冲去长度,也是直接调用FileInputStream 里面的read方法。这样两个类性能没差异。
不同的的是,在BufferedInputStream如果在缓存区足够大的情况下会调用fill()方法,进行预读。此时有可能之前buffer中已经存在部分上次调用read时fill()方法进行预读的数据,正是本次所需要的,此时性能较高。
我只例举了一个,其他方法都是类似。
我只例举了一个,其他方法都是类似。我也看了一下BufferedInputStream的源码,它默认为使用者创建了一个缓冲区,可以自定义大小,也可以使用默认大小,同时重写了FileInputStream的read方法,然后定义了一个私有的read1方法,在这个私有方法中调用了fill()方法。这个fill方法我没看明白,它的作用是什么?如你所说是对数据进行预读,那么它是怎么实现的?还望不吝赐教,感激不尽啊
我只例举了一个,其他方法都是类似。我也看了一下BufferedInputStream的源码,它默认为使用者创建了一个缓冲区,可以自定义大小,也可以使用默认大小,同时重写了FileInputStream的read方法,然后定义了一个私有的read1方法,在这个私有方法中调用了fill()方法。这个fill方法我没看明白,它的作用是什么?如你所说是对数据进行预读,那么它是怎么实现的?还望不吝赐教,感激不尽啊
看一下这个篇文章。
http://www.software8.co/wzjs/java/1770.html
我只例举了一个,其他方法都是类似。我也看了一下BufferedInputStream的源码,它默认为使用者创建了一个缓冲区,可以自定义大小,也可以使用默认大小,同时重写了FileInputStream的read方法,然后定义了一个私有的read1方法,在这个私有方法中调用了fill()方法。这个fill方法我没看明白,它的作用是什么?如你所说是对数据进行预读,那么它是怎么实现的?还望不吝赐教,感激不尽啊
看一下这个篇文章。
http://www.software8.co/wzjs/java/1770.html
真是太谢谢你了 上面的链接中的内容讲的很详细。