A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ⒈心只霸占沵 高级黑马   /  2014-4-17 15:44  /  1267 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ⒈心只霸占沵 于 2014-4-17 21:51 编辑

字符流中的BufferedReader 读取用的是装饰模式,装饰的FileReader
它有读取一行的方法readLine()方法,这体现了缓冲区
字节流中的BufferedInputStream   装饰的FileInputStream
bufferedInputStream 内部是有一个byte[] 类型的缓冲区
但是具体方法体现在哪呢?

4 个回复

倒序浏览
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 的一个方法,你是说这个么?

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
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 的读取效率  体现在什么地方
回复 使用道具 举报
⒈心只霸占沵 发表于 2014-4-17 21:36
上面这两个方法
read(byte[] b,int off,int len)
FileInputStream这个类不是也有吗?

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

谢谢你帮忙,我再仔细理解理解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马