论“FileInputStream”与“BufferedInputStream”的区别

在谈“FileInputStream”与“BufferedInputStream”的区别之前,我们先要明白“FileInputStream”与“BufferedInputStream”分别是什么;

FileInputStream,它是InputStream的实现类,又被称为“字节输入流”,FileInputStream是到磁盘中读取文件,在读取文件时可以以一个字节一个字节读,也可以一批字节一批字节地读,具体实现代码如下:

到磁盘中逐个读取:

public static void main(String[] args) {
		try (InputStream in = new FileInputStream("D:\\文件操作\\222.txt")) {
			int data=-1;//保存每次读取到的字节值
			//逐个读取
			 while((data=in.read())!=-1) {
				 System.out.println((char)data);
			 }
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

就好比到苹果园摘苹果,这种方式是摘一颗,往出拿一颗; 

 到磁盘中批量读取:

public static void main(String[] args) {
		try (InputStream in = new FileInputStream("D:\\文件操作\\333.jpg")) {
			byte[] buff=new byte[128];
			int len=-1;
			//批量读取(缓冲)
			while((len=in.read(buff))!=-1) {
				System.out.printf("本次读取%d字节,字节数组为:%s\n",len,Arrays.toString(buff));
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

而这种方式是摘满一筐苹果在往出拿;

BufferedInputStream,他是FilterInputStream的实现类,也是FileInputStream的装饰器,在创建BufferedInputStream的对象时必须传入FileInputStream对象参数,BufferedInputStream被称为“带有缓冲区的字节输入流”,在内存中维护着一块特殊的空间(缓冲区),该缓冲区默认大小为:8192字节,在新建某输入流对应的BufferedInputStream后,当我们通过read()读取输入流的数据时BufferedInputStream会将该输入流的数据分批的填入到缓冲区中。每当缓冲区中的数据被读完之后,输入流会再次填充数据缓冲区;如此反复,直到我们读完输入流数据位置。具体实现代码如下:

public static void main(String[] args) {
		//带有缓冲区的字节输入流
		//缓冲区默认大小8192
		try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\文件操作\\333.jpg"))) {
			int data=-1;
			//从内存的buff缓冲区读取字节
			while((data=bis.read())!=-1) {
				System.out.println(data);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

 这种方式就好比,我们站在苹果园外边不用动,有人将苹果摘好,放到你旁边,当你拿完你旁边的苹果,会有人继续放,直到拿完苹果园苹果为止;

总而言之,BufferedInputStream读取文件的速度远大于FileInputStream读取文件的速度,且BufferedInputStream是到内存中的缓存区进行读取,而FileInputStream是到磁盘中进行读取;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾远望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值