java中关于BufferedInputStream和FileInputStream中Read方法的问题

BufferedInputStream是有一个缓冲区,就是用byte数组实现的,是将文件的数据读取到缓冲区内,之后直接从缓冲区中读取,但FileInputStream中也... BufferedInputStream是有一个缓冲区,就是用byte数组实现的,是将文件的数据读取到缓冲区内,之后直接从缓冲区中读取,但FileInputStream中也有一个Read(byte[] buf)方法,是将数据读到数组中,再从数组中读取数据,问,这两个有什么区别吗?为什么第一种效率就高了? 展开
 我来答
ygnzh_cool
2013-12-26
知道答主
回答量:19
采纳率:0%
帮助的人:18.8万
展开全部
我感觉你的问题是没有真正理解缓冲区。BufferedInputStream的实现中有一个用于存储数据的内部缓冲区数组:protected volatile byte[] buf。这个缓冲区数组的作用在于对源进行数据块访问,而不是一字节一字节的访问,也就是进行一次I/O将一块数据存到缓冲区中,再从缓冲区中read,当缓冲区为空时再重新读新的数据块。这个数组是jdk里的BufferedInputStream类的实现里的,是作为BufferedInputStream的成员变量的,不是指read方法参数里的byte[]数组,read方法参数的byte数组只是read到的字节存到哪,完全不是一个概念。至于效率,在理解了缓冲区的概念后就好理解了。FileInputStream的read方法由于没有缓冲区的支持,只能每次read都对源进行I/O,频繁I/O是比较麻烦的,所以效率肯定没有BufferedInputStream的read方法快。今夜失眠,码了好几个回答,这个最长,采纳吧亲。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式