字符流下,有一个缓冲流 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(); // 关闭缓冲流对象,对应的文件流对象也会关闭,
}
}
什么是装饰模式:
当想要对已有对象进行功能的增强时,
可以定义类,将已有对象传入,基于已有功能,并提供加强功能。
这种自定义类,称为 装饰模式。
------------------------------------------------------------------------------------------------------------------------
装饰类 和 继承 的区别
1. 装饰类比继承灵活,避免了继承体系的臃肿
2. 降低了类与类之间的关系
3. 装饰类是基于已有对象的一种提升,在原有基础上提供更强的功能
4. 装饰类和被装饰类,通常都属于同一个体系中
5. 装饰类和被装饰类同属父类或接口
-------------------------------------------------------------------------------------------------------------------------
请查看BufferedReader 类 和 BufferedWriter 类,这里就不提供示例了。