缓冲字节流 BufferedInputStream 和 BufferedOutputStream
缓冲字符流:BufferedReader 、 BufferedWriter (缓冲流都是处理流)
缓冲流原理:
会在内存中开辟一个空间作为缓冲区,在读写之前,先将磁盘数据导入到缓冲区,在读写时直接从缓冲区进行读写,减少了直接从磁盘读写次数,从而提高读写效率。
缓冲流使用:
1) 读文件和写文件都使用了缓冲区,减少了读写次数,从而提高了效率
2) 当创建这两个缓冲流的对象时时,会创建了内部缓冲数组, 缺省使用 32 字节大小的缓冲区.
3) 当读取数据时,数据按块读入缓冲区,其后的读操作则直接访问缓冲区
4) 当写入数据时,首先写入缓冲区,当缓冲区满时,其中的数据写入所连接的输出流。使用方法 flush()可以手动强制将缓冲区的内容全部写入输出流
5) 关闭流的顺序和打开流的顺序相反.只要关闭高层流即可,关闭高层流其实关闭的底层节点流
6) Flush 的使用:手动将 buffer 中内容写入文件
代码示例:为了方便观看理解,代码的异常全部抛出了
/**
* 缓冲字节流BufferedInputStream、BufferedOutputStream 复制文档
*/
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class TestBuffered_Stream {
public static void main(String[] args) throws IOException {
//数据源
FileInputStream fis = new FileInputStream("E:\\a.txt");
//目的地
FileOutputStream fos = new FileOutputStream("E:\\test.txt");
/*
* 使用缓冲字节流
* */
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos);
long time1=System.currentTimeMillis();
//写入
byte[] by = new byte[1024]; //中转站
int len=0;
while((len=bis.read(by))!=-1) {
bos.write(by, 0, len);
}
long time2=System.currentTimeMillis();
System.out.println("复制文件花费了"+(time2-time1)+"毫秒");
bos.close();
bis.close();
}
}
/**
* 缓冲字符流BufferedReader、BufferedWriter 复制文档
*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class TestBufferedReader_Writer {
public static void main(String[] args) throws IOException {
//数据源
BufferedReader br = new BufferedReader(new FileReader("E:\\a.txt"));
//目的地
BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\test.txt"));
//读写
String str = null; //用于存储 读到的字符串
while((str=br.readLine())!=null) { //readLine()表示读取一个文本行的数据
bw.write(str);
bw.newLine();//表示换行,不写也可以,但是存储的文本不会换行
bw.flush();//手动强制将缓冲区的内容写入输出流
}
bw.close();
br.close();
}
}