缓冲流
1.1概述
缓冲流,也叫高效流,是对4个基本的FileXxx流的增强,所以也是4个流,按照数据类型分类:
字节缓冲流:BufferedInputStream,BufferedOutputStream
字符缓冲流:BufferedReader,BufferedWriter
缓冲流的基本原理,是在创建流对象时,先将数据缓冲起来,然后⼀起写⼊或者读取出来,减少系统IO次数,从⽽
提⾼读写的效率
1.2字节缓冲流
构造方法
public BufferedInputStream(InputStream in) :创建⼀个 新的缓冲输⼊流。
public BufferedOutputStream(OutputStream out) : 创建⼀个新的缓冲输出流。
构造举例,代码如下:
// 创建字节缓冲输⼊流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("bis.txt"));
// 创建字节缓冲输出流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("bos.txt"));
效率测试
1.基本流,代码如下:
public class BufferedClass {
public static void main(String[] args) throws Exception {
//记录开始时间
long start = System.currentTimeMillis();
FileInputStream ins = new FileInputStream("src\\file.txt");
FileOutputStream ous = new FileOutputStream("src\\ax.txt");
// byte[] buffer = new byte[1024];
int len;
while ((len = ins.read()) != -1) {
ous.write(len);
}
//记录结束时间
long end = System.currentTimeMillis()-start;
System.out.println("普通流复制文件时间: "+end+" 秒");
ins.close();
ous.close();
}
}
运行结果:
2.缓冲流,代码如下:
package com.xxx.bean;
import java.io.*;
/**
* @author 想要的东西太贵
* @version 喜欢的女人太美
* @date 2021/7/28 11:12
*/
public class BufferedStream {
public static void main(String[] args) throws IOException {
//缓冲流
//记录开始时间
long start = System.currentTimeMillis();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("src\\file.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("src\\aa.txt"));
//定义一个长度
int len;
while ((len = bis.read()) != -1) {
bos.write(len);
}
//记录结束时间
long end = System.currentTimeMillis() - start;
System.out.println("缓冲流复制文件时间: "+end+" 秒");
//关闭流
bis.close();
bos.close();
}
}
运行结果:
3.缓冲流使用数组的方式,代码如下:
package com.xxx.bean;
import java.io.*;
/**
* @author 想要的东西太贵
* @version 喜欢的女人太美
* @date 2021/7/28 11:12
*/
public class BufferedStream2 {
public static void main(String[] args) throws Exception {
//缓冲流
//记录开始时间
long start = System.currentTimeMillis();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("src\\file.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("src\\aa.txt"));
//定义一个长度
int len;
//定义一个数组
byte[] buffer = new byte[1024];
while ((len = bis.read(buffer)) != -1) {
bos.write(buffer,0,len);
}
//记录结束时间
long end = System.currentTimeMillis() - start;
System.out.println("缓冲流复制文件时间: "+end+" 秒");
//关闭流
bis.close();
bos.close();
}
}
运行结果:
1.3字符缓冲流
构造方法
public BufferedReader(Reader in) :创建⼀个 新的缓冲输⼊流。
public BufferedWriter(Writer out) : 创建⼀个新的缓冲输出流。
构造举例,代码如下:
// 创建字符缓冲输⼊流
BufferedReader br = new BufferedReader(new FileReader("br.txt"));
// 创建字符缓冲输出流
BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));
特有方法
字符缓冲流的基本⽅法与普通字节流调⽤⽅式⼀致,不再阐述,我们来看它们具备的特有⽅法。
BufferedReader: public String readLine() : 读⼀⾏⽂字。
BufferedWriter: public void newLine() : 写⼀⾏⾏分隔符,由系统属性定义符号。
readLine方法演示,代码如下:
public class BufferedReaderDemo {
public static void main(String[] args) throws IOException {
// 创建流对象
BufferedReader br = new BufferedReader(new FileReader("in.txt"));
// 定义字符串,保存读取的⼀⾏⽂字
String line = null;
// 循环读取,读取到最后返回null
while ((line = br.readLine())!=null) {
System.out.print(line);
System.out.println("------");
}
// 释放资源
br.close();
}
}
newLine方法演示,代码如下:
public class BufferedWriterDemo throws IOException {
public static void main(String[] args) throws IOException {
// 创建流对象
BufferedWriter bw = new BufferedWriter(new FileWriter("out.txt"));
// 写出数据
bw.write("张家界");
// 写出换⾏
bw.newLine();
bw.write("学院");
bw.newLine();
// 释放资源
bw.close();
}
}
输出效果:
张家界
学院