FileInputStream和BufferedInputStream read()的区别

两个类都有read()方法。FileInputStream:publicintread(byte[]b,intoff,intlen)throwsIOException从此... 两个类都有read()方法。
FileInputStream:
public int read(byte[] b,
int off,
int len)
throws IOException从此输入流中将最多 len 个字节的数据读入一个字节数组中。在某些输入可用之前,此方法将阻塞。

BufferedInputStream:
public int read(byte[] b,
int off,
int len)
throws IOException在此字节输入流中从给定的偏移量开始将各字节读取到指定的 byte 数组中。

BufferedInputStream不是号称是处理流?有缓冲区可用,FileInputStream不是已经有了吗?

BufferedInputStream还有这样的构造方法
BufferedInputStream(InputStream in)
创建 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。

这有这个必要吗

高手释疑...
展开
 我来答
henterji
推荐于2018-03-20 · TA获得超过2973个赞
知道大有可为答主
回答量:1835
采纳率:0%
帮助的人:1873万
展开全部
你也看到了,在FileInputStream里有一个说明是说此方法将阻塞,意思就是说在你读一个文件输入流的时候,当读到某个位置的时候,如果做一些其他处理(比如说接受一部分字节做一些处理等等)这个时候输入流在什么位置就是什么位置,不会继续往下读,而BufferedInputStream虽然也有一个read方法,但是从名字就可以看出,它带有一个缓冲区,它是一个非阻塞的方法,在你读到某个位置的时候,做一些处理的时候,输入流可能还会继续读入字节,这样就达到了缓冲的效果。
对于性能要求不高的时候,用哪个都无所谓,但是如果有性能要求,建议你还是用BufferedInputStream。
zyxzyx6688
推荐于2016-01-02 · TA获得超过4.4万个赞
知道大有可为答主
回答量:1.8万
采纳率:88%
帮助的人:1978万
展开全部
FileInputStream是字节流,BufferedInputStream是字节缓冲流,使用BufferedInputStream读资源比FileInputStream读取资源的效率高(BufferedInputStream的read方法会读取尽可能多的字节),且FileInputStream对象的read方法会出现阻塞;

在FileInputStream里有一个说明是说此方法将阻塞,意思就是说在你读一个文件输入流的时候,当读到某个位置的时候,如果做一些其他处理(比如说接受一部分字节做一些处理等等)这个时候输入流在什么位置就是什么位置,不会继续往下读,而BufferedInputStream虽然也有一个read方法,但是从名字就可以看出,它带有一个缓冲区,它是一个非阻塞的方法,在你读到某个位置的时候,做一些处理的时候,输入流可能还会继续读入字节,这样就达到了缓冲的效果。
对于性能要求不高的时候,用哪个都无所谓,但是如果有性能要求,建议还是用BufferedInputStream。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
魔法212
2015-06-21 · TA获得超过698个赞
知道小有建树答主
回答量:375
采纳率:33%
帮助的人:281万
展开全部
我觉得可能是不太了解“堵塞”的意思。
假设一个文件的长度是100个字节,要将之读取到内存中,再假设您每次只读取10个字节,那么读完整个文件是不是读取10次的呀?
假设老板让你完成100件事情,老板说,你每天只完成10件就可以了,难道你非得等到第十天才完成第100件事情吗?有一天您在中午下班前就完成了10件事情,下午您不妨多干一点,那么也许在第9天的时候就完成了100件事情。
同理,BufferedInputStream有可能会读取比您规定的更多的东西到内存,以减少访问IO的次数,
总之您要记住一句话,访问IO的次数越少,性能就越高,原因就在于CPU和内存的速度》》》》远大于硬盘或其他外部设备的速度。
换一个不太恰当的例子来说,您和您的朋友一起去登山,你朋友太不给力了,走一会儿就要休息,而您呢,您的体力比他要好的多,根本不需要休息,所以每当他休息的时候,您得等着他,您那时候什么也干不了,这就叫堵塞,堵塞就是说您有能力干某事,但是迫于某种原因您什么也干不了,只能干等。所以您朋友休息的次数越少,你们两个到达山顶所花费的时间就越少。CPU访问硬盘的次数越少,程序就越快。BufferedInputStream在小型文件中的性能优势无法体现出来,假设您将以个2G大小的文件从D盘完全复制到E盘,性能之优势便展露无疑!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友222345d68
2008-08-15 · 超过21用户采纳过TA的回答
知道答主
回答量:145
采纳率:0%
帮助的人:80.4万
展开全部
BufferedInputStream 用了缓存流,这样提高流的操作速度和性能

建议你去看一看装实模式和流的一些文章
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
puderty
2008-08-15 · TA获得超过3530个赞
知道小有建树答主
回答量:530
采纳率:0%
帮助的人:0
展开全部
后者有缓冲功能,性能会更能好,前者没有缓冲的,性能会更差,楼主再看看IO类会比较好,了解下为什么需要Bufferedxxx,在有了可以读写的情况下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式