浅谈我对IO流的了解 - 字符流缓冲区


字符流下,有一个缓冲流 BufferedReader , BufferedWriter


缓冲区的出现,大大的提高了对数据的读写效率——

--------------------------------------------------------------------------------------------------------------------------------

为什么这么说呢 ?

因为以前文件的读取 ,写入,往往是一个字符的读取和写入,效率低。

加入了缓冲区后,我可以一次性的写入一行数据,和读取一行数据,效率高。


举个饮水机实例体现下:

平常,你要喝水,你会拿个杯子,去饮水机出接水,等装满了一杯,你就喝下了这杯水,说了一个字,爽。

杯子就是这个缓冲区,杯子起到了缓冲的作用。


试想下你要是没有杯子,你想喝水,只能自己去饮水机处的出水口,用自己的口接水来喝,喝的不爽不说,

还辛苦,对不对 ~  而且看的还特别逗,当然这个是后话了。


-----------------------------------------------------------------------------------------------------------------------------------------------


既然缓冲区那么好,不多说,整个缓冲区示例演示:

import java.io.*;

class BufferedDemo
{
	public static void main(String[] args) throws IOException
	{
		bufferedWriter();

		bufferedReader();
	}

	public static void bufferedReader() throws IOException
	{
		FileReader fr = new FileReader("test.txt");

		// 建立缓冲区的前提,需要有对象(就好比你没有饮水机,你叫我拿个杯子去哪里装水)

		BufferedReader br = new BufferedReader(fr); //建立缓冲区,并且指定对象
		                                            //拿到杯子,并告知是去饮水机装水的

		String value = null;  //临时存储数据用的容器。

		while((value = br.readLine())!=null)  // 通过缓冲区的 readLine 方法,可以取到一行数据。
		{
			System.out.println(value);	// 打印取到的数据。
		}

		br.close();  // 关闭缓冲流对象,对应的文件流对象也会关闭,
					 // 因为缓冲区的底层实际上就是在调用文件流的 close 方法。
	}


	public static void bufferedWriter() throws IOException 
	{
		FileWriter fw = new FileWriter("test.txt");

		BufferedWriter bw = new BufferedWriter(fw);  //建立缓冲区,并且指定对象

		for(int i = 1; i<6; i++)
		{
			bw.write("通过缓冲区写入第"+i+"条数据"); //通过缓冲区 write 方法写入数据

			bw.newLine(); /* 写入缓冲区特有的方法,该方法是写入一个换行符。
					 咦,这个我自己就可以呀,\r\n嘛,确实如此,不过\r\n是window下识别的标记。
				         linux下是\n, 拿到linux下运行就会多一个\r,显然违背了JAVA的跨平台的优势。
				         虽然我们获取系统的参数来判断运行那个,可是JAVA已经帮我们做了, 它封装到
					 newLine方法里,我调用newLine方法即可,下次换行使用newLine方法可以跨平台  */			

			bw.flush();   // 即时刷新数据
		}
		bw.close();  // 关闭缓冲流对象,对应的文件流对象也会关闭,
	}
}


其实,缓冲区就好像一个加强功能的类, 对于这种体现, JAVA开发工程师称为装饰模式。

什么是装饰模式:

当想要对已有对象进行功能的增强时,

可以定义类,将已有对象传入,基于已有功能,并提供加强功能。

这种自定义类,称为 装饰模式。

------------------------------------------------------------------------------------------------------------------------

装饰类 和 继承 的区别

1. 装饰类比继承灵活,避免了继承体系的臃肿

2. 降低了类与类之间的关系

3. 装饰类是基于已有对象的一种提升,在原有基础上提供更强的功能

4. 装饰类和被装饰类,通常都属于同一个体系中

5. 装饰类和被装饰类同属父类或接口 

-------------------------------------------------------------------------------------------------------------------------


请查看BufferedReader 类 和 BufferedWriter 类,这里就不提供示例了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值