前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >缓冲流简要介绍

缓冲流简要介绍

作者头像
发布2020-10-23 10:26:23
6420
发布2020-10-23 10:26:23
举报
文章被收录于专栏:后端JavaEE

一、缓冲流有什么作用?

代码语言:javascript
复制
使用缓冲数组以后,整体的读取,写入效率提升很大。
降低了CPU通过内存访问硬盘的次数。提高效率,降低磁盘损耗。

二、缓冲流包含什么?

代码语言:javascript
复制
2.2字节输入缓冲
	BufferedInputStream
2.3字节输出缓冲
	BufferedOutputStream
2.4字符输入缓冲
	BufferedReader
2.5字符输出缓冲
	BufferedWrite

注意

代码语言:javascript
复制
		这里需要注意的是,所有的缓冲流都没有任何的读取,写入文件能力,这里都需要对应的输入流和输出流
	来提供对应的能力。
		在创建缓冲流流对象时,需要传入对应的输入流对象和输出流对象。底层就是提供了一个默认大小的缓冲
	数组,用于提高效率。

2.2字节缓冲流

代码语言:javascript
复制
输入
	BufferedInputStream(InputStream in);	
		这里需要的对象是一个字节输入流基类对象。同时也可也传入InputStream子类对象
输出
	BufferedOutputStream(OutputStream out);
		这里需要的对象是一个字节输出流基类对象。同时也可也传入OutputStream子类对象

以上传入的InputStream和OutputStream都是用于提供对应文件的读写能力。
2.2.1 字节输入流缓冲效率问题
代码语言:javascript
复制
1. 在BufferedInputStream底层中有一个默认容量为8KB的byte类型缓冲数组。
2. fill方法是一个操作核心
	a. 从硬盘中读取数据,读取的数据容量和缓冲数组容量一致。
	b. 所有的read方法,都是从缓冲数组中读取数据
	c. 每一次读取数据之前,都会检查缓冲区内是否有数据,如果没有,fill方法执行,填充数据。

3. 利用缓冲,fill方法,可以极大的降低CPU通过内存访问硬盘的次数。同时程序操作的数据是在内存中进行交互的。
2.2.2 字节输出流缓冲效率问题
代码语言:javascript
复制
1. 在BufferedOutputStream类对象,默认有一个8KB的byte类型缓冲数组
2. 数据写入文件时并不是直接保存到文件中,而是保存在内存8KB字节缓冲数组中
3. 如果8KB空间填满,会直接flush缓冲区,数据保存到硬盘中,同时清空整个缓冲区。
4. 在BufferedOutputStream关闭时,首先会调用flush方法,保存数据到文件,清空缓冲区,并且规
划缓冲区占用内存,同时关闭缓冲流使用的字节输出流。
代码演示
代码语言:javascript
复制
public static void useBuffered() {
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
	
	try {
		bis = new BufferedInputStream(new FileInputStream(new File("D:/aaa/2.txt")));
		bos = new BufferedOutputStream(new FileOutputStream(new File("D:/aaa/buffered.txt")));
		
		int content = -1;
		
		while ((content = bis.read()) != -1) {
			bos.write(content);
		}
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} finally {
		if (bos != null) {
			try {
				bos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		if (bis != null) {
			try {
				bis.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
2.3 字符缓冲流
代码语言:javascript
复制
BufferedReader
	字符缓冲输入流
	BufferedReader(Reader reader);
BufferedWriter
	字符缓冲输出流
	BufferedWriter(Writer writer);
2.3.1 字符缓冲流效率问题
代码语言:javascript
复制
1. 字符缓冲输入流,底层有一个8192个元素的缓冲字符数组,而且使用fill方法从硬盘中读取数据填充缓
冲数组。

2. 字符缓冲输出流,底层有一个8192个元素的缓冲字符数组,使用flush方法将缓冲数组中的内容写入到
硬盘当中。

3.使用缓冲数组之后,程序在运行的大部分时间内都是内存和内存直接的数据交互过程。内存直接的操作
效率是比较高的。并且降低了CPU通过内存操作硬盘的次数

4. 关闭字符缓冲流,都会首先释放对应的缓冲数组空间,并且关闭创建对应的字符输入流和字符输出流。

5. 
字符缓冲输入流中
	String readLine(); 读取一行数据
字符缓冲输出流中
	void newLine(); 换行
代码演示:
代码语言:javascript
复制
public class Demo4 {
	public static void main(String[] args) {
		BufferedWriter bw = null;
	
	try {
		bw = new BufferedWriter(new FileWriter(new File("D:/aaa/星巴克浓郁咖啡摩卡.txt")));
		
		bw.write("浓郁咖啡摩卡");
		bw.newLine();
		bw.write("浓郁咖啡拿铁");
		bw.newLine();
		bw.write("摩卡可可碎星冰乐");
		
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} finally {
		if (bw != null) {
			try {
				bw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

private static void bufferedReader() {
	BufferedReader br = null;
	
	try {
		br = new BufferedReader(new FileReader(new File("D:/aaa/1.txt")));
		
		System.out.println(br.readLine());
		System.out.println(br.readLine());
		System.out.println(br.readLine());
		System.out.println(br.readLine());
		System.out.println(br.readLine());
		System.out.println(br.readLine());
		
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} finally {
		if (br != null) {
			try {
				br.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/02/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、缓冲流有什么作用?
  • 二、缓冲流包含什么?
    • 2.2字节缓冲流
      • 2.2.1 字节输入流缓冲效率问题
      • 2.2.2 字节输出流缓冲效率问题
      • 代码演示
      • 2.3 字符缓冲流
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档