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();
}
}
Java学习笔记之IO(四):BufferedInputStream缓冲输入字节流
最新推荐文章于 2022-09-06 19:52:07 发布