“FileInputStream“和“BufferedInputStream“的区别


首先分别了解一下FileInputStream和BufferedInputStream的基础了解

一、FileInputStream文件输入流

FileInputStream:从文件流中读取数据,是InputStream的一个子类。FileInputStream到磁盘读取文件,可以一个字节一个字节读取,也可以建立字节数组byte[],以固定容量读取。

read()方法实现的单字节读取
		//创建字节流对象
	try (FileInputStream in = new FileInputStream("c:\\text\\pbj1.text")) {
		//保存每次读到的字节值
		int data=-1;
		while((data=in.read())!=-1) {
			System.out.println(data);//可以用char把字节转成字符,便于观察
		}
	} catch (IOException e) {
		e.printStackTrace();
	}
read()重载实现的字节数组批量读取
	//创建字节流对象
		try (FileInputStream in = new FileInputStream("c:\\text\\pbj1.text")) {
			//创建固定容量的字节数组
			byte[] buff=new byte[1024];
			int len=-1;
			//这个read(byte[])的返回值是本次读取到的字节容量值
			while((len=in.read(buff))!=-1) {
				System.out.printf("本次读取到%d字节,%s \n",len,Arrays.toString(buff));
			}
		} catch (IOException e) {
			
			e.printStackTrace();
		}

FileInputStream的字节数组读取方式需要自建字节数组,自建缓冲区,所以引入了BufferedInputStream,自带缓冲区。

二、BufferedInputStream缓冲输入流

BufferedInputStream:是FilterInputStream的子类,作用是为其他输入流提供缓冲功能,自带的缓冲区大小为8192bit,所以在我们用BufferedInputStream读取输入流时,会填入8192的缓冲区里。创建BufferedInputStream时,需要传入一个InputStream对象。

BufferedInputStream代码示例
		//带有缓冲区的字节输入流
		//缓冲区默认大小8192
	try (BufferedInputStream bin = new BufferedInputStream(new FileInputStream("c:\\text\\pbj1.text"))) {
		
		int data=-1;
		
		//从内存的buffer缓冲区中读取1个字节
		while((data=bin.read())!=-1) {
			System.out.println(data);
			
		}
	} catch (IOException e) {
		e.printStackTrace();
	}

FileInputStream是从磁盘上读取,读取速度较慢,且耗费磁盘。
BufferedInputStream是从内存缓冲区读取,速度更快。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值