关于缓冲区IO
在学IO流 在许多流中,比如FileInputStream中的read方法有这个read(byte[] b, int off, int len) ,这里把字节读到字节数组中,既然有了缓冲的数组,为什么还有bufferedinputsteam来装饰?
JAVA中常用IO流类:FileInputStream和FileOutputStream
http://blog.
最简单直接的使用方法如上面的帖子所写
但是执行效率不高,从而产生了BufferedInputStream,如下帖
BufferedInputStream学习笔记
http://icanfly.
关键的区别在于:
整个fill的过程,可以看作是BufferedInputStream对外提供滑动读取的功能实现,通过预先读入一整段原始输入流数据至缓冲区中,而外界对BufferedInputStream的读取操作实际上是在缓冲区上进行,如果读取的数据超过了缓冲区的范围,那么BufferedInputStream负责重新从原始输入流中载入下一截数据填充缓冲区,然后外界继续通过缓冲区进行数据读取。这样的设计的好处是:避免了大量的磁盘IO,因为原始的InputStream类实现的read是即时读取的,即每一次读取都会是一次磁盘IO操作(哪怕只读取了1个字节的数据),可想而知,如果数据量巨大,这样的磁盘消耗非常可怕。而通过缓冲区的实现,读取可以读取缓冲区中的内容,当读取超过缓冲区的内容后再进行一次磁盘IO,载入一段数据填充缓冲,那么下一次读取一般情况下就直接可以从缓冲区读取,减少了磁盘IO。