一、知识点解释:
1.什么是缓冲流?
答:就是比原始流(加File的流)传输效率更加快的流。
优点:
1.自带缓冲区,读写性能更加强悍
2.自带8k缓冲区,原始流是1k
直白理解:就是原先传输的只是水管慢慢传,现在加上了一个水塔,可以提前缓存更多的数据。
2.语法?
答:和原始流差不多。一样用到多态的方法。抽象类前面加上Buffere就好了
字节缓冲输入流(BuffereInputStream)
字节缓冲输出流(BuffereOutputStream)
字符缓冲输入流(BuffereReader)
字符缓冲输出流(BuffereWriter)
直白理解:就是在原始流一样语法,然后多加一条加强语句就好了
二、代码例子:
1.缓冲字节流
代码解释:这里用一个文件复制的例子,里面包含了字节输入和字节输出流去理解。结合数组来用,就是字节流速度达到了最快的程度。下面代码里面有教快速的数组读写方法和一个一个字节的缓慢读取方法
例子:
package bao; import java.io.*; public class Test { public static void main(String[] args) throws Exception { //1.创建要复制的文件地址 InputStream in = new FileInputStream("D:\\java_base\\SE\\src\\bao\\大富豪.txt");//原始流语句 InputStream bin = new BufferedInputStream(in);//加上高级缓冲流语句 //2.创建要粘贴到的目标地址 OutputStream out = new FileOutputStream("D:\\java_base\\SE\\src\\bao\\继承者.txt");//原始流语句 BufferedOutputStream bout = new BufferedOutputStream(out);//加上高级缓冲流语句 //3.中介管道转移数据 //传输快速的数组方法。缓慢的读写方法放在其他知识点下面了 byte[] bytes = new byte[1024];//数据交接的桶,1024大小 int len;//记录每次读取的字节 while ((len = bin.read(bytes))!=-1){//读 bout.write(bytes,0,len);//写 } //关闭流 bin.close(); bout.close(); } } //其他知识点:代码每次运行都会覆盖之前的数据,如果想不被覆盖,就在原始输出流地址的后面加上true就可以了。 //传输缓慢的一个一个字节读写的方法 /* int b; while ((b=bin.read())!=-1){ bout.write(b); }*/
素材
运行结果:
2.缓冲字符流
代码解释:缓冲字符流比原始流读写更加的快速。而且新增了一个readLine(行读取)功能。字节流和字符流代码功能基本一样,只要改抽象类和基本数据类型------字节用byte,字符用char就好了
例子:
字符缓冲输入流(读取):
package bao; import java.io.BufferedReader; import java.io.FileReader; import java.io.Reader; public class Test { public static void main(String[] args) throws Exception { //1.原始流:创建读取文件的对象 Reader fr = new FileReader("D:\\java_base\\SE\\src\\bao\\大富豪.txt"); //2.缓冲流:给原始流加上 BufferedReader br = new BufferedReader(fr); String line;//缓冲桶 while ((line = br.readLine())!=null){//读文件数据内容 System.out.println(line);//输出 } br.close();//关闭流 } }
素材:
运行结果:
第二行:锦瑟无端五十弦,一弦一柱思华年
第三行:庄生晓梦迷蝴蝶,望帝春心托杜鹃
ADFASF985
字符缓冲输出流(写入):
例子:
package bao; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; public class Test { public static void main(String[] args) throws IOException { //1.原始流。创建要写入数据的对象 Writer fw = new FileWriter("D:\\java_base\\SE\\src\\bao\\风花雪月.txt");//每次写入都会覆盖之前的,本行括号行尾里面加上true就好了 //2.缓冲流。给原始流加强 BufferedWriter bw = new BufferedWriter(fw); //3.单独写入数据 bw.write("天亮了啊");//只能单独写入数字 bw.newLine();//换行 bw.write('K');//只能单独写入一个字节 bw.newLine();//换行 //4.大量写入数据。用到数组 char[] chars ="今日海棠花未眠kk99,4332".toCharArray(); bw.write(chars);//把数组的全部写进去。也可以截取写进去 bw.write("\r\n");//换行 bw.close();//关闭流 } }
运行结果:
天亮了啊
K
今日海棠花未眠kk99,4332
旁白:缓冲流和原始流写法差不多,就是在原始流写好的基础上加上一条缓冲流语句。这个语句就是抽象类前面加上这个就可以了Buffere。缓冲流还多加了一条语法(行读取)的读写Line