BufferedInputStream类的详解(画图分析)

BufferedInputStream 缓冲字节输入流

类的关系图:

在这里插入图片描述
缓冲流,那何为缓冲呢?

其实就是在内存中开辟一块了缓冲区,因为内存的读写速度比硬盘要高得多,因此它可以做到提升读取速率的功能

原理图

在这里插入图片描述
构造方法

//缓冲流就是加强流,是对普通流的加强
BufferedInputStream(InputStream in)     创建缓冲字节输入流,参数为基本的字节输入流
BufferedInputStream(InputStream in,int size)   创建缓冲字节输入流对象,可以指定缓冲区的大小

我们知道字节缓冲流,主要是在内存中开辟了一块缓冲区。在实际的传输中使用的还是底层的普通的字节流,因此构造方法传递的参数还是字节流对象。

BufferedInputStream对象的创建示例:

//创建方法1(一般不用,太麻烦)
File file = new File("D:\\www\\abc.txt");
InputStream  fi = new FileInputStream(file);
BufferedInputStream buffer1 = new BufferedInputStream(fi);
//创建方法2,比较常用
BufferedInputStream  buffer2  = new BufferedInputStream(new FileInputStream("D:\\www\\abc.txt"));

BufferedInputStream读数据的方式

read方法以及返回值分析

因为它的构造方法传递是一个普通的字节输入流因此read方法的使用与FileInputStream类中读的方法是一致的

read()        //一次读取一个字节
read(byte[] ch)    //一次读取一个字节数组
read(byte[] ch , int off,int length)   //一次读取一个字节数组,设置偏移量,以及读取字节的长度

因为read方法和FileInputStream类的读取方法一致,所以不做详细介绍,可以参照:FileInputStream类的详细介绍

直接演示一下代码吧,控制台打印:

import java.io.*;
public class Text_缓冲字节流的练习 {
	public static void main(String[] args)throws Exception {
	    //文件内容为:aabbcc我
		File file = new File("D:\\www\\text.txt");
		read(file);  //调用读取文件的方法1
		/*
		输出结果:aabbcc??
		//出现乱码是因为我的文本文件中有一个中文字符'我',
		它是两个字节,那么我们一次读取一个字节的话就强行把它拆开导致乱码
		*/
	}
       //使用缓冲字节输出流来实现文件读取的功能
	    public static void read(File file)throws Exception {
		InputStream in = new BufferedInputStream(new FileInputStream(file));
		//一次读取一个字节
		int len;
		while((len = in.read()) != -1) {
			System.out.print((char)len);
		}
		in.close();		
	}
//定义一个方法使用缓冲字节流读取文件(一次读取一个字节数组)
public static void readByte(File file) throws Exception{
//使用多态的方式,简化创建BufferedInputStream对象
InputStream in2 = new BufferedInputStream(new FileInputStream(file));
byte[] bytes = new byte[2];
int len;
while((len = in2.read(bytes)) != -1){
System.out.print(new String(bytes,0,len));  //将字节数组转换为字符串,打印在控制台。
}
in2.close();   //读取结束,释放资源!
}
}
//输出结果:aabbcc我
//这里没有出现乱码原因:
//一次读取两个字节分别是aa  bb  cc  我  此时的我刚好两个字节所以没有出现乱码

BufferedInputStream使用方法和FileInputStream类的使用一模一样,它只是普通字节输入流的加强版。

原创内容若存在错误请联系我哦,分享快乐,分享知识!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值