栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

FileInputStream与BufferedInputStream有哪些区别?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

FileInputStream与BufferedInputStream有哪些区别?

文章目录
  • 前言
  • 一、FileInputStream(文件输入流)
    • 1.逐个字节读取:
    • 2.批量字节读取:
  • 二、BufferedInputStream(缓冲输入流)


前言

InputStream(字节输入流)是Java标准库提供的最基本的输入流。它在java.io这个包里,InputStream并不是一个接口而是一个抽象类,是所有抽象流的父类。其中最常用的两个子类为FileInputStream(文件输入流)和BufferedInputStream(缓冲输入流),那么FileInputStream与BufferedInputStream都有哪些区别呢?


一、FileInputStream(文件输入流)

FileInputStream就是从文件流中读取数据,创建一个FileInputStream的实例对象,相当于在磁盘和内存之间建立一个管道,对磁盘中的文件进行读(输入)操作。
注意:在创建对象的同时必须传入文件的路径
下面的代码分别演示了如何完整逐个字节读取和批量字节读取一个文件的所有字节。

1.逐个字节读取:

代码示例如下:

public static void main(String[] args) {
		// 创建(实例化)"字节输入流"对象
		//放在try()中会自动关闭,释放资源
		try (InputStream in = new FileInputStream("D:\tuji.txt")) {
			// 保证每次读取到的字节值
			int data = -1;
			
			// 正常读取 :0-255
			// 读取末尾 :-1
			while ((data = in.read()) != -1) {//逐个字节读取
				System.out.print((char) data);//不能读中文 乱码
			}
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
2.批量字节读取:

代码示例如下:

public static void main(String[] args) {
		try (InputStream in = new FileInputStream("D:\tuji.txt")) {
			//批量字节读取(缓冲)
			byte[] buff = new byte[128];
			
			//每次读取若干字节,填充到buff字节数组中
			int len = -1;
			while((len = in.read(buff)) != -1) {
				System.out.printf("本次读取%d字节:%sn",len,Arrays.toString(buff));
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
二、BufferedInputStream(缓冲输入流)

BufferedInputStream是缓冲输入流,它继承于FilterInputStream。BufferedInputStream比FileInputStream的效率高,它的作用就是为另一个输入流添加一些和功能,例如,提供“缓冲功能”、支持“mark()标记”和“reset()重置方法”。BufferedInputStream其实就是在内存和磁盘之间通过字节数组(默认为8192)建立一个缓冲区,当要读取磁盘中的文件数据时,先通过FileInputStream从磁盘中读取数据,再分批将数据分批填入到缓冲区中。每当缓冲区的数据被读完,FileInputStream会在次填充数据缓冲区,直到读完文件数据。
注意:在创建对象时必须传入一个输入流对象
代码示例如下:

public static void main(String[] args) {
		//带有缓冲区的字节输入流
		//缓冲区大小为8192
		try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\Users\Lenovo\Desktop\javaEE\Spring.png"))) {
			//从内存的buff缓冲区中读取一个字节
			int data = -1;
			while((data = bis.read()) != -1) {
				System.out.println(data);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/927241.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号