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

来源:互联网 发布:淘宝店铺头像在哪里换 编辑:程序博客网 时间:2024/05/01 08:45


字符流下,有一个缓冲流 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
原创粉丝点击