java中关于BufferedInputStream和FileInputStream中Read方法的问题
BufferedInputStream是有一个缓冲区,就是用byte数组实现的,是将文件的数据读取到缓冲区内,之后直接从缓冲区中读取,但FileInputStream中也...
BufferedInputStream是有一个缓冲区,就是用byte数组实现的,是将文件的数据读取到缓冲区内,之后直接从缓冲区中读取,但FileInputStream中也有一个Read(byte[] buf)方法,是将数据读到数组中,再从数组中读取数据,问,这两个有什么区别吗?为什么第一种效率就高了?
展开
1个回答
展开全部
我感觉你的问题是没有真正理解缓冲区。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方法快。今夜失眠,码了好几个回答,这个最长,采纳吧亲。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询