------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流>-----
4.缓冲字符流BufferedWriter和BufferedReader
缓冲区的出现是为了提高对文件读写的效率
缓冲区所对应的类:BufferedWriter,BufferedReader分别是Writer类和Reader类的子类。
(1) BufferedWriter的基本方法:
BufferedWriter(Writer out) BufferedWriter(Writer out , int sz) // 构造方法 ,必须传一个字符输出流对象
flush() // 只要使用缓冲区,就一定要刷新
close() // 关闭缓冲区中的流对象。此时不需要再调用Writer的关闭流方法
newLine()// 新增方法 , 换行方法,该方法具有跨平台型。
(2) BufferedReader的基本方法:
BufferedReader(Reader in), BufferedReader(Readerin, int sz) //构造方法,同上
close( ) //关闭缓冲区的流对象,同样不需再调用 Reader的关闭流方法
String readLine( ) //新增方法,读入一行文件数据,读到文件结尾时返回null。
该方法原理:它在内存中创建了一个字符串数组,用read方法读取文件一行的字符存到数组中,当遇到回车"\r\n"字符的时候,返回已经存到数组中的文件中某一行的字符。
5.缓存输入输出流复制文件
可以使用readLine方法进行读取文件,以提高读取速度,需要注意的是readLine方法返回的时候只返回回车符之前的内容,并不返回回车符,所以在进行数据写入的时候,要加上newLine()方法。
import java.io.*;
public class BufferCopyDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
BufferedWriter bw=null;
BufferedReader br=null;
try{
bw=new BufferedWriter(new FileWriter("copytext.txt"));
br=new BufferedReader(new FileReader("text.txt"));
String line;
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
}
catch(IOException e){
throw new RuntimeException ("复制出问题了");
}
finally{
try{
if(bw!=null){
bw.close();
}
}
catch(IOException e){
throw new RuntimeException ("关闭流出问题了");
}
try{
if(br!=null){
br.close();
}
}
catch(IOException e){
throw new RuntimeException ("关闭流出问题了");
}
}
}
}
6.装饰设计模式
如果想要对原有类进行功能增强时,可以定义新类,将原有类的对象传入,基于已有功能并提供加强功能,新类成为装饰类。
装饰设计模式和继承的对比:
1)装饰设计模式是使用构造函数进行参数传递,来增强已有功能;
2)如果为了增加某个功能而产生子类(使用继承),那么这个体系会变得臃肿;
3)装饰类要比继承更加灵活,装饰类只是用来增强已有对象的功能,它们属于同一个体系,所以避免了继承体系的臃肿,而且降低了类与类的关系