关于java中InputStream和BufferedInputStream的比较以及缓冲区概念
2014-06-22 16:53
453 查看
BufferedInputStream是一个带有缓冲区域的InputStream,它的继承体系如下:
InputStream
|__FilterInputStream
|__BufferedInputStream
以看作是BufferedInputStream对外提供滑动读取的功能实现,通过预先读入一整段原始输入流数据至缓冲区中,而外界对BufferedInputStream的读取操作实际上是在缓冲区上进行,如果读取的数据超过了缓冲区的范围,那么BufferedInputStream负责重新从原始输入流中载入下一截数据填充缓冲区,然后外界继续通过缓冲区进行数据读取。这样的设计的好处是:避免了大量的磁盘IO,因为原始的InputStream类实现的read是即时读取的,即每一次读取都会是一次磁盘IO操作(哪怕只读取了1个字节的数据),可想而知,如果数据量巨大,这样的磁盘消耗非常可怕。而通过缓冲区的实现,读取可以读取缓冲区中的内容,当读取超过缓冲区的内容后再进行一次磁盘IO,载入一段数据填充缓冲,那么下一次读取一般情况下就直接可以从缓冲区读取,减少了磁盘IO。
BufferedInputStream是套在某个其他的InputStream外,起着缓存的功能,用来改善里面那个InputStream的性能(如果可能的话),它自己不能脱离里面那个单独存在。FileInputStream是读取一个文件来作InputStream。所以你可以把BufferedInputStream套在FileInputStream外,来改善FileInputStream的性能。
可以来看看BufferedInputStream的构造函数就可以知道了
InputStream
|__FilterInputStream
|__BufferedInputStream
以看作是BufferedInputStream对外提供滑动读取的功能实现,通过预先读入一整段原始输入流数据至缓冲区中,而外界对BufferedInputStream的读取操作实际上是在缓冲区上进行,如果读取的数据超过了缓冲区的范围,那么BufferedInputStream负责重新从原始输入流中载入下一截数据填充缓冲区,然后外界继续通过缓冲区进行数据读取。这样的设计的好处是:避免了大量的磁盘IO,因为原始的InputStream类实现的read是即时读取的,即每一次读取都会是一次磁盘IO操作(哪怕只读取了1个字节的数据),可想而知,如果数据量巨大,这样的磁盘消耗非常可怕。而通过缓冲区的实现,读取可以读取缓冲区中的内容,当读取超过缓冲区的内容后再进行一次磁盘IO,载入一段数据填充缓冲,那么下一次读取一般情况下就直接可以从缓冲区读取,减少了磁盘IO。
BufferedInputStream是套在某个其他的InputStream外,起着缓存的功能,用来改善里面那个InputStream的性能(如果可能的话),它自己不能脱离里面那个单独存在。FileInputStream是读取一个文件来作InputStream。所以你可以把BufferedInputStream套在FileInputStream外,来改善FileInputStream的性能。
可以来看看BufferedInputStream的构造函数就可以知道了
BufferedInputStream(InputStream in) 创建一个 BufferedInputStream并保存其参数,即输入流 in,以便将来使用。 |
BufferedInputStream(InputStream in, int size) 创建具有指定缓冲区大小的 BufferedInputStream并保存其参数,即输入流 in,以便将来使用。 |
相关文章推荐
- 关于Java序列化和反序列化的理解以及概念和例子
- java(jsp)中各种概念的比较
- JAVA中关于树型图以及文件过滤器的基本实例代码(转贴请署名出处^_^)
- JAVA 用得比较少的关键字以及语法
- Java技术、MyEclipse、Tomcat、JDK的概念,优势以及特点
- think in java第十三章关于老式awt、新式awt以及Swing的读书笔记
- 关于javaMail中标题以及发件人乱码的问题总结
- Java部分概念区别比较
- Java中关于==和equal的区别 以及equals()方法重写
- 关于java的集合类,以及HashMap中Set的用法!
- java里的时间操作以及比较
- 关于ByteArrayOutputStream(字节数组输出流)的一个例子,与ByteArrayInputStream作一比较
- 关于Remoting和一些概念比较
- JAVA读XML:sax,dom,jdom,dom4j的比较以及选择(转)
- 关于Remoting和一些概念比较
- 关于java中main()方法以及命令行参数的若干注意
- Oracle配置监听和连接,以及一些比较容易混淆的相关概念
- Java与C#关于面向对象的比较
- 关于Java的singleton模式的介绍,比较有用
- 有必要澄清两个基本概念--算法和过程的关系以及关于程序设计方法论的一些看法