黑马程序员技术交流社区

标题: IO流中的缓冲区问题 [打印本页]

作者: ⒈心只霸占沵    时间: 2014-4-17 15:44
标题: IO流中的缓冲区问题
本帖最后由 ⒈心只霸占沵 于 2014-4-17 21:51 编辑

字符流中的BufferedReader 读取用的是装饰模式,装饰的FileReader
它有读取一行的方法readLine()方法,这体现了缓冲区
字节流中的BufferedInputStream   装饰的FileInputStream
bufferedInputStream 内部是有一个byte[] 类型的缓冲区
但是具体方法体现在哪呢?
作者: kuroro自走核炮    时间: 2014-4-17 19:53
read(byte[] b, int off, int len)
          从此字节输入流中给定偏移量处开始将各字节读取到指定的 byte 数组中。

read
public int read(byte[] b,
                int off,
                int len)
         throws IOException从此字节输入流中给定偏移量处开始将各字节读取到指定的 byte 数组中。
此方法实现了 InputStream 类相应 read 方法的常规协定。另一个便捷之处在于,它将通过重复地调用底层流的 read 方法,尝试读取尽可能多的字节。这种迭代的 read 会一直继续下去,直到满足以下条件之一:

已经读取了指定的字节数,
底层流的 read 方法返回 -1,指示文件末尾(end-of-file),或者
底层流的 available 方法返回 0,指示将阻塞后续的输入请求。
如果第一次对底层流调用 read 返回 -1(指示文件末尾),则此方法返回 -1。否则此方法返回实际读取的字节数。
鼓励(但不是必须)此类的各个子类以相同的方式尝试读取尽可能多的字节。

API里面找到的BufferedInputStream 的一个方法,你是说这个么?
作者: ⒈心只霸占沵    时间: 2014-4-17 21:36
kuroro自走核炮 发表于 2014-4-17 19:53
read(byte[] b, int off, int len)
          从此字节输入流中给定偏移量处开始将各字节读取到指定的 byt ...

上面这两个方法
read(byte[] b,int off,int len)
FileInputStream这个类不是也有吗?
我的意思是
BufferedReader  提高FileReader读取效率  体现在readLine()方法
BufferedInputStream 提高FileInputStream 的读取效率  体现在什么地方
作者: kuroro自走核炮    时间: 2014-4-17 21:47
⒈心只霸占沵 发表于 2014-4-17 21:36
上面这两个方法
read(byte[] b,int off,int len)
FileInputStream这个类不是也有吗?

为啥必须有具体的连续读取才能算是提高读取效率的体现呢?
buttered系列类提高读取效率主要是靠的其内部有一个缓冲区,由于从缓冲区里读取数据远比直接从物理数据源(譬如文件)读取速度快,所以Buffered类的效率很高。换而言之证明了BufferedInputStream里缓冲区的存在不就能证明其效率高了么?
作者: ⒈心只霸占沵    时间: 2014-4-17 21:50
kuroro自走核炮 发表于 2014-4-17 21:47
为啥必须有具体的连续读取才能算是提高读取效率的体现呢?
buttered系列类提高读取效率主要是靠的其内部 ...

谢谢你帮忙,我再仔细理解理解




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2