关于BufferedInputStream和FileInputStream的区别

,打扰一下,关于BufferedInputStream和FileInputStream的区别?

我看到您的回答:“你也看到了,在FileInputStream里有一个说明是说此方法将阻塞,意思就是说在你读一个文件输入流的时候,当读到某个位置的时候,如果做一些其他处理(比如说接受一部分字节做一些处理等等)这个时候输入流在什么位置就是什么位置,不会继续往下读,而BufferedInputStream虽然也有一个read方法,但是从名字就可以看出,它带有一个缓冲区,它是一个非阻塞的方法,在你读到某个位置的时候,做一些处理的时候,输入流可能还会继续读入字节,这样就达到了缓冲的效果。
对于性能要求不高的时候,用哪个都无所谓,但是如果有性能要求,建议你还是用BufferedInputStream。”

能不能举个例子呢?
最新回答
等待亦是放下

2024-12-01 16:17:40

区别:FileInputStream是字节流,BufferedInputStream是字节缓冲流,使用BufferedInputStream读资源比FileInputStream读取资源的效率高(BufferedInputStream的read方法会读取尽可能多的字节),且FileInputStream对象的read方法会出现阻塞。

1、FileInputStream,直接操作本机I/O,把持着一个文件的句柄,说白了它是面向文件的。

2、BufferedInputStream,它只是面向字节流的,你可以不使用它,自己创建数组,将字节放在里面,也就缓存在jvm内存里,之后操作内存数据。

3、BufferedInputStream是套在某个其他的InputStream外,起着缓存的功能,用来改善里面那个InputStream的性能(如果可能的话),它自己不能脱离里面那个单独存在。

4、FileInputStream是读取一个文件来做InputStream。所以你可以把BufferedInputStream套在FileInputStream外,来改善FileInputStream的性能。


扩展资料

FileInputStream是Java语言中抽象类InputStream用来具体实现类的创建对象。FileInputStream可以从文件系统中的某个文件中获得输入字节,获取的文件可用性取决于主机环境。

FileInputStream的构造方法需要指定文件的来源,通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的 File 对象 file 指定。

参考资料:

百度百科-FileInputStream

ぃ貓猫oο

2024-12-01 13:53:41

一、数据处理方式不同

1、BufferedInputStream:内部缓冲区当read时会先把缓冲区填满(默认缓冲区是8192),然后下次读取是直接从缓冲区读取。当读取的位置大于缓冲区时会再一次加载缓冲区。

2、FileInputStream:会直接读取文件,不经过缓冲。

二、内部方法不同

1、BufferedInputStream:copyWithBufferedStream方法实现了使用BufferedInputStream和BufferedOutputStream复制文件。

2、FileInputStream:copyWithFileStream方法实现了使用FileInputStream和FileOutputStream复制文件。


三、使用规则不同

1、BufferedInputStream:套在某个其他的InputStream外,起着缓存的功能,用来改善里面那个InputStream的性能。

2、FileInputStream:读取一个文件来作InputStream。所以可以把BufferedInputStream套在FileInputStream外,来改善FileInputStream的性能。 


参考资料来源:

百度百科-字节流

参考资料来源:

百度百科-数据流

虚伪无情

2024-12-01 17:38:34

BufferedInputStream是套在某个其他的InputStream外,起着缓存的功能,用来改善里面那个InputStream的性能(如果可能的话),它自己不能脱离里面那个单独存在。FileInputStream是读取一个文件来作InputStream。所以你可以把BufferedInputStream套在FileInputStream外,来改善FileInputStream的性能。

FileInputStream与BufferedInputStream区别:
FileInputStream是字节流,BufferedInputStream是字节缓冲流,使用BufferedInputStream读资源比FileInputStream读取资源的效率高(BufferedInputStream的read方法会读取尽可能多的字节),且FileInputStream对象的read方法会出现阻塞;

FileInputStream与FileReader区别:
FileInputStream是字节流,FileReader是字符流,用字节流读取中文的时候,可能会出现乱码,而用字符流则不会出现乱码,而且用字符流读取的速度比字节流要快;

ObjectOutputStream与ByteArrayOutputStream的区别:
ObjectOutputStream可以将java对象写入outputstream流中(序列化),然后进行持久化,此对象必须是实现了java.io.Serializable 接口;
ByteArrayOutputStream是将数据写入byte数组中;

了解“堵塞”的意思吧!
假设一个文件的长度是100个字节,要将之读取到内存中,再假设您每次只读取10个字节,那么读完整个文件是不是读取10次的呀?

假设老板让你完成100件事情,老板说,你每天只完成10件就可以了,难道你非得等到第十天才完成第100件事情吗?有一天您在中午下班前就完成了10件事情,下午您不妨多干一点,那么也许在第9天的时候就完成了100件事情。

同理,BufferedInputStream有可能会读取比您规定的更多的东西到内存,以减少访问IO的次数,
总之您要记住一句话,访问IO的次数越少,性能就越高,原因就在于CPU和内存的速度》》》》远大于硬盘或其他外部设备的速度。

换一个不太恰当的例子来说,您和您的朋友一起去登山,你朋友太不给力了,走一会儿就要休息,而您呢,您的体力比他要好的多,根本不需要休息,所以每当他休息的时候,您得等着他,您那时候什么也干不了,这就叫堵塞,堵塞就是说您有能力干某事,但是迫于某种原因您什么也干不了,只能干等。所以您朋友休息的次数越少,你们两个到达山顶所花费的时间就越少。CPU访问硬盘的次数越少,程序就越快。BufferedInputStream在小型文件中的性能优势无法体现出来,假设您将以个2G大小的文件从D盘完全复制到E盘,性能之优势便展露无疑!
逝去的终将逝去

2024-12-01 05:53:49

我使用过程,目前最大的区别在于【BufferedInputStream】支持读取外网文件