字符流的缓冲区
✔缓冲区的出现提高了数据的读写效率
✔对应类
|-------BufferedWriter
|-------BufferedReader
✔缓冲区要结合流才可以使用
✔在流的基础上对流的功能进行了增强
缓冲区的出现是为了提高流的操作效率而出现的.
所以,在创建缓冲区之前,必须要先有流对象.(流就是水滴,缓冲区就是杯子)
import java.io.*;
class BufferedDemo
{
public static void main(String[] args)throws IOException{
/*到复制
//用缓冲去写入数据
//创建一个字符写入流对象和文件关联.............
FileWriter fw=new FileWriter("Demo.txt");
//创建一个缓冲区
BufferedWriter bufw=new BufferedWriter(fw);
for(int x=1;x<6;x++){
//先将数据写到缓冲区,最后通过刷新,再将数据刷到本地
bufw.write("dsfsdf"+x);
//记住,只要用到缓冲区,就要记得刷新..写一次刷一次,相当于自动保存.停电了也不怕
bufw.flush();
//newLine()换行,,自动识别系统该用那个换行符
bufw.newLine();
}
//其实关闭缓冲区,就是在关闭缓冲区中的流对象,所以,只关闭流对象所对的缓冲区即可.实际上,是在调用fw的close();
bufw.close();
//用缓冲区读取数据
//创建一个读取流对象和文件相关联..............
FileReader fr=new FileReader("Demo.txt");
//为了提高效率,加入缓冲技术,将字符读取流对象作为参数传递给缓冲对象的构造函数.
BufferedReader bure=new BufferedReader(fr);
//该缓冲区提供了,一次读一行的方法readLine(),方便对文本数据的获取.当返回null时,表示,
//读到了文件的末尾返回null
String line=null;
while((line=bure.readLine())!=null){
System.out.println(line);
}
*/
//用缓冲区实现复制功能
BufferedReader bure=null;
BufferedWriter buwr=null;
try{
bure=new BufferedReader(new FileReader("Demo.txt"));
buwr=new BufferedWriter(new FileWriter("Test.txt"));
String line=null;
while((line=bure.readLine())!=null){
buwr.write(line);
buwr.newLine();
buwr.flush();
}
}
catch(IOException e)
{
throw new RuntimeException("读写失败");
}
finally{
try{
if(bure!=null){
bure.close();
}
}
catch(IOException e){
throw new RuntimeException("读取关闭失败");
}
try{
if(buwr!=null)
buwr.close();
}
catch(IOException e){
throw new RuntimeException("写入关闭失败");
}
}
}
}
//自己定义的缓冲类(装饰类)
//实现读一行功能ReaderLine
.装饰设计模式:
当想要对己有的对象进行功能增强时,
可以定义类,将已有对象传入,基于已有的功能,并提供加强功能.
那么自定义的该类成为装饰类.
装饰类通常会通过构造方法接受被装饰的对象并基于被装饰对像的功能,提供更强的功能
BufferedReader的子类LineNumberReader
代码演示:
以下是模拟: