黑马程序员---缓冲区的使用,装饰设计模式

------- android培训java培训、期待与您交流! ----------

字符流的缓冲区 BufferedWriter BufferedReader

缓冲区是为了提高数据的读写效率

 * 分别是WriterReader下的子类

 * 要结合流才能使用  ,在流的基础上对流的功能进行了增强

 * 用缓冲区复制文件

 

 

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();
	}
}

*BufferedReaderFileReader的装饰类

 * 模拟BufferedReader中的readLine()方法。

 * 将原有的read方法增强

 * StringBuilder临时容器实现BufferedReader中的readLine()方法

 

*BufferedReaderFileReader的装饰类

 * 模拟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();
	}
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值