Java学习笔记之IO(四):BufferedInputStream缓冲输入字节流

本文详细介绍了Java中BufferedInputStream的使用方法,包括如何通过它提高文件读取效率,以及其实现原理。文章通过示例代码展示了两种读取文件的方式,并解释了缓冲流为何能够提升性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.io;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.junit.Test;

/*

输入字节流:

------| InputStream:输入字节流的基类,抽象类;
---------| FileInputStream:读取文件数据的输入字节流;
---------| BufferedInputStream:缓冲输入字节流,为了提高读取文件数据的效率;
			其实该类内部只不过是维护了一个8kb的字节数组而已;
			
	注意:凡是缓冲流都不具备读写文件的能力;		
			
	使用BufferedInputStream的步骤:
	1、找到目标文件;
	2、建立数据的输入通道;
	3、创建缓冲输入字节流对象;
	4、读取文件数据;
	5、关闭资源;

	建议自己创建缓冲数组读取文件数据;

 */

public class Demo6 {
	
	// 自己创建缓冲数组读取文件数据:
	@Test
	public void test1() throws IOException{
		// 找到目标文件
		File file = new File("D:\\a.txt");
		
		// 建立数据的输入通道
		FileInputStream in = new FileInputStream(file);
		
		// 循环读取数据
		int len = 0;
		byte[] buf = new byte[1024];
		while ((len = in.read(buf)) != -1){
			System.out.println(new String(buf, 0, len));
		}
		
		// 释放资源
		in.close();
	}
	
	// 使用BufferedInputStream缓冲输入字节流读取文件数据:
	@Test
	public void test2() throws IOException{
		// 1、找到目标文件
		File file = new File("D:\\a.txt");
		
		// 2、建立数据的输入通道
		FileInputStream in = new FileInputStream(file);
		
		// 问题1:为什么创建BufferedInputStream的时候需要传入一个FileInputStream对象?
		// 因为BufferedInputStream本身不具备读文件的能力,所以需要借助FileInputStream来读取文件的数据;
		// 3、创建缓冲输入字节流对象
		BufferedInputStream buffer = new BufferedInputStream(in);
		
		// 4、读取文件数据
		int content = 0;
		// 问题2:BufferedInputStream的出现是为了提高读取文件的效率;但是BufferedInputStream的read()方法
		// 每次读取一个字节的数据,而FileInputStream的read()方法也是每次读取一个字节的数据,为什么说效率高呢?
		// 因为BufferedInputStream是先将数据填充到自己底层维护的缓冲数组中,在调用read()方法的时候每次都是从
		// 内存中读取数据,而FileInputStream的read()方法每次都是从硬盘上读取数据;
		while ((content = buffer.read()) != -1){
			System.out.print((char)content);
		}
		
		// 5、关闭资源;查看close()方法的源码可以看出,调用BufferedInputStream的close()方法,
		// 实际上就是调用FileInputStream的close()方法;
		buffer.close();
//		in.close();
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值