(一)缓冲流概述
缓冲流是一类处理流(包裹流),必须依附于节点流(原始流);
缓冲流是带有缓冲区的输入输出流;
缓冲流可以减少我们对IO的访问,达到保护硬盘的效果;
缓冲流对数据的读写具有缓冲作用,提高读写效率并增加了一些新方法;
(二)四类缓冲流
BufferedReader
提供一个readLine方法用于读取一行字符串,但无法读取回车换行符;
BufferedWriter
提供一个newLine方法用于写入一个行分割符;
import java.io.*;
public class TestBuffered_1 {
public static void main(String[] args) {
BufferedReader br=null;
BufferedWriter bw=null;
try {
br=new BufferedReader(new FileReader("D:\\JAVA\\lianxi\\src\\lianxi\\TestBuffered_1 .java"));
bw=new BufferedWriter(new FileWriter("C:\\Users\\86152\\Desktop\\huanchongliu\\chenggong.dox"));
String st;
while(null!=(st=br.readLine())) {
bw.write(st);
bw.newLine();
}
bw.flush();
}
catch(FileNotFoundException e) {
e.printStackTrace();
System.exit(-1);
}
catch(IOException e) {
e.printStackTrace();
System.exit(-1);
}
finally {
try {
br.close();
bw.close();
}
catch(IOException e) {
e.printStackTrace();
System.exit(-1);
}
}
System.out.printf("复制成功!\n");
}
}
BufferedInputStream
带有缓冲的输入流,允许一次向硬盘读取多个字节的数据;
BufferedOutputStream
带有缓冲的输出流,允许一次向硬盘写入多个字节的数据;
public class TestBuffered_2 {
public static void main(String[] args) {
BufferedInputStream br=null;
BufferedOutputStream bw=null;
try {
br=new BufferedInputStream(new FileInputStream("D:\\JAVA\\lianxi\\src\\lianxi\\TestBuffered_2.java"));
//br有个默认缓冲区,大小为32个字节
bw=new BufferedOutputStream(new FileOutputStream("C:\\Users\\86152\\Desktop\\huanchongliu\\chenggong.dox"));
//bw有个默认缓冲区,大小为32个字节
byte[] buf=new byte[1024];
int len;
while(-1!=(len=br.read(buf,0,1024))) {
//br.read(buf,0,1024)中表示不是从buf中读取数据,而是从br关联的地址文件中读取数据,
//并先将其放入br默认的缓冲区中,再将缓冲区中的数据写入buf数组中,每次可向数组写入1024个字节,
//返回实际字节数,全部数据写入完成返回-1
bw.write(buf);
//bw.write(buf)同上理可推
}
bw.flush();
}
catch(FileNotFoundException e) {
e.printStackTrace();
System.exit(-1);
}
catch(IOException e) {
e.printStackTrace();
System.exit(-1);
}
finally {
try {
br.close();
bw.close();
}
catch(IOException e) {
e.printStackTrace();
System.exit(-1);
}
}
System.out.printf("复制成功!\n");
}
}