文章目录
首先分别了解一下FileInputStream和BufferedInputStream的基础了解
一、FileInputStream文件输入流
FileInputStream:从文件流中读取数据,是InputStream的一个子类。FileInputStream到磁盘读取文件,可以一个字节一个字节读取,也可以建立字节数组byte[],以固定容量读取。
read()方法实现的单字节读取
//创建字节流对象
try (FileInputStream in = new FileInputStream("c:\\text\\pbj1.text")) {
//保存每次读到的字节值
int data=-1;
while((data=in.read())!=-1) {
System.out.println(data);//可以用char把字节转成字符,便于观察
}
} catch (IOException e) {
e.printStackTrace();
}
read()重载实现的字节数组批量读取
//创建字节流对象
try (FileInputStream in = new FileInputStream("c:\\text\\pbj1.text")) {
//创建固定容量的字节数组
byte[] buff=new byte[1024];
int len=-1;
//这个read(byte[])的返回值是本次读取到的字节容量值
while((len=in.read(buff))!=-1) {
System.out.printf("本次读取到%d字节,%s \n",len,Arrays.toString(buff));
}
} catch (IOException e) {
e.printStackTrace();
}
FileInputStream的字节数组读取方式需要自建字节数组,自建缓冲区,所以引入了BufferedInputStream,自带缓冲区。
二、BufferedInputStream缓冲输入流
BufferedInputStream:是FilterInputStream的子类,作用是为其他输入流提供缓冲功能,自带的缓冲区大小为8192bit,所以在我们用BufferedInputStream读取输入流时,会填入8192的缓冲区里。创建BufferedInputStream时,需要传入一个InputStream对象。
BufferedInputStream代码示例
//带有缓冲区的字节输入流
//缓冲区默认大小8192
try (BufferedInputStream bin = new BufferedInputStream(new FileInputStream("c:\\text\\pbj1.text"))) {
int data=-1;
//从内存的buffer缓冲区中读取1个字节
while((data=bin.read())!=-1) {
System.out.println(data);
}
} catch (IOException e) {
e.printStackTrace();
}
FileInputStream是从磁盘上读取,读取速度较慢,且耗费磁盘。
BufferedInputStream是从内存缓冲区读取,速度更快。