------- android培训、java培训、期待与您交流! ----------
字符流的缓冲区 BufferedWriter BufferedReader
* 缓冲区是为了提高数据的读写效率
* 分别是Writer和Reader下的子类
* 要结合流才能使用 ,在流的基础上对流的功能进行了增强
* 用缓冲区复制文件
import java.io.*;
public class CopyTest
{
public static void main(String[] args)
{
BufferedWriter bw=null;
BufferedReader br=null;
try
{
bw=new BufferedWriter(new FileWriter("d:\\demo.txt"));//要使用缓冲区提高读写效率只需将创建的读写流对象传递给对应的缓冲区的构造函数
br=new BufferedReader(new FileReader("demo.txt"));
String line=null;//字符串line在这里是中转站,读取内容存在line中,再被write方法写入到指定文件
while((line=br.readLine())!=null)//readLine()读取一行返回字符串,独到没有时返回null
{
bw.write(line);
bw.newLine();//BufferedWriter提供了夸平台的换行方法newLine()
}
}
catch(IOException e)
{
System.out.println("duxieshibai");
}
finally
{
try
{
if(bw!=null)
bw.close();//关闭缓冲区就是在关闭其对应流对象,所以不用再次关闭流对象
}
catch(IOException e)
{
System.out.println("xieruguanbishibai");
}
try
{
if(br!=null)
br.close();
}
catch(IOException e)
{
System.out.println("duquguanbishibai");
}
}
}
}
装饰设计模式
装饰设计模式
* 当想要已有的对象进行功能增强时
* 可以自定义类,将已有对象传入,基于已有的功能提供加强功能
* 这个自定义类就是是装饰类
*
*
* 装饰类通过构造函数接受被装饰的类,并提供更强的功能
*
*
* 装饰和继承的区别
* 装饰模式比继承灵活,避免了继承体系的臃肿
* 降低了类与类之间的关系。
*
* 装饰类时增强已有对象,具备的功能和已有的相同,只不过是加强了功能
* 装饰类和被装饰类都属于同一个体系
*
* 从继承结构变成了组合结构(装饰类中有被装饰的对象)
class Person
{
public void chifan()
{
System.out.println("吃");
}
}
class SuperPerson
{
private Person p;
SuperPerson(Person p)
{
this.p=p;
}
public void superChifan()
{
System.out.println("吃前");
p.chifan();
System.out.println("吃后");
}
}
public class zhuangshi
{
public static void main(String[] args)
{
SuperPerson sp=new SuperPerson(new Person());
sp.superChifan();
}
}
*BufferedReader是FileReader的装饰类
* 模拟BufferedReader中的readLine()方法。
* 将原有的read方法增强
* 用StringBuilder临时容器实现BufferedReader中的readLine()方法
*BufferedReader是FileReader的装饰类
* 模拟BufferedReader中的readLine()方法。
* 将原有的read方法增强
* 用StringBuilder临时容器实现BufferedReader中的readLine()方法
import java.io.*;
class MyBufferedReader
{
private FileReader r;
MyBufferedReader(FileReader r)
{
this.r=r;
}
//增强方法,一次读取一行数据的方法
public String myReadLine() throws IOException
{
StringBuilder sb=new StringBuilder();
int ch=0;
while((ch=r.read())!=-1)
{
if(ch=='\r')
continue;
if(ch=='\n')
return sb.toString();
else
sb.append((char)ch);
}
//最后一行没有回车时
if(sb.length()!=0)
return sb.toString();
return null;
}
public void myClose() throws IOException
{
r.close();
}
}