IO:字符流

字符流的缓冲区

缓冲区的出现提高了对数据的读写效率,缓冲区要结合流才可以使用,在流的基础上对流的功能进行了增强。

对应类:
BufferedWriter
BufferedReader

Demo1:字符写入缓冲区

/*
缓冲区的出现是为了提高流的操作效率而出现的。
所以在创建缓冲区之前,必须要先有流对象。
该缓冲区当中提供了一个跨平台的换行符:newLine(); windows系统的换行是"\r\n",linux是"\n";
*/
import java.io.*;

class BufferedWriterDemo{
	public static void main(String[] args) throws IOException{
		//创建一个字符写入流对象。
		FileWriter fw = new FileWriter("buf.txt");
		//为了提高字符写入流的效率,加入缓冲技术。
		BufferedWriter bufw = new BufferedWriter(fw);
		for(int x=1;x<10;x++){
			bufw.write("aaaaa"+x);
			bufw.newLine();
			//只要用到缓冲区,就要记得刷新
			bufw.flush();
		}
		//关闭缓冲区就是关闭缓冲区中的流对象,所以不用再单独关闭流对象了。
		bufw.close();
		//不用再单独关闭流对象了。
		//fw.close();
	}
}

Demo2:字符读取缓冲区

/*
字符读取缓冲区
*/
import java.io.*;
class BufferedReaderDemo{
	public static void main(String[] args) throws IOException{
		//创建一个读取流对象,和文件相关联。
		FileReader fr = new FileReader("buf.txt");
		//使用缓冲
		BufferedReader bufr = new BufferedReader(fr);
		
		String line = null;
		while((line = bufr.readLine()) != null){
			System.out.println(line);
		}
		bufr.close();
		
	}
}

readLine方法原理
无论是读取一行,还是读取多个字符。其实最终都是在硬盘上一个一个字符读取的。
所以最终使用的还是read方法,一次读取一个字符。 readLine读取一个字符就放到内存中,
当读取到换行符的时候,就回把读取到的字符拼接成字符 串返回,但是并没有返回换行符。

装饰设计模式

概述:当想要对已有对象的功能进行增强时,可以定义一个类,将已有对象当作参数传入。基于已有的
功能实现功能增强。那么自定义的类就被成为装饰类。例如:Demo2中BufferedReader类则是FileReader的装饰类,BufferedReader下的readLine方法是FileReader下read方法的增强方法。

Demo3:装饰设计模式

/*
想要对Person类中的吃饭功能进行增强,但又不便于修改源代码。
这时可以使用装饰设计模式,新建个装饰类。
*/
class Person{
	public void chifan(){
		System.out.println("吃饭");
	}
}

//Person的装饰类
class NewPerson{
	private Person p;
	NewPerson(Person p){
		this.p = p;
	}
	//针对Persion的chifan()方法进行增强
	public void newChifan(){
		System.out.println("喝点酒");
		p.chifan();
		System.out.println("饭后水果");
	}
}

class PersonDemo{
	public static void main(String[] agrs){
		Person p = new Person();
		//p.chifan();
		NewPerson np = new NewPerson(p);
		np.newChifan();
	}
}

装饰和继承的区别

  • 继承扩展性比较差。假如父类A有两个子类A1和A2,对两个子类进行扩展则需要继续向下创建子类A11和A21。如果父类A有了子类A3,那么也需要创建A3的子类A31,扩展性不好。如果使用装饰模式,只需要创建父类A的装饰类即可,父类A有多少子类都不需要在新建子类的子类了。
  • 由第一条可以看出继承代码比较臃肿。
  • 装饰模式更加灵活
    装饰和继承代码区分
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值