Java IO流及装饰者设计模式学习笔记
1、IO流基本概念
IO流及输入输出流,常用可分为两大类:字节流、字符流。
区别与应用场景:字节流在处理出入输出时不会用到缓存,而字符流用到了缓存。字符流用来处理单个字节无法表示的内容。
字符流原理:若干字节->解码方式->解码->索引字符集->字符。
2、IO类设计模式与设计原理
IO类在设计时采用了装饰者设计模式(Decorator),主要通过抽象装饰者类来实现。
2.1、装饰者设计模式
定义及优点:在不改变原有对象的基础之上,将功能附加到对象上。使用不同装饰类以及这些类的排列组合,可以动态的实现不同的效果。
2.2、IO流中的装饰者模式
以InputStream为例,通过抽象装饰者类FilterInputStream来实现装饰类,如BufferedInputStream就是一个继承FilterInputStream类实现的装饰类。
2.3、如何实现一个新的装饰类
示例如下:
import java.io.FileInputStream; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; /** * @author my: * @version 2020-09-07 * IO流实现机制练习(装饰者模式) */ public class Demo_1 { public static void main(String[] args){ try { ToLowerInputStream in = new ToLowerInputStream(new FileInputStream(".\iotest.txt")); int c; while((c = in.read()) != -1){ System.out.print((char)c); } in.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 转小写字母 */ class ToLowerInputStream extends FilterInputStream{ protected ToLowerInputStream(InputStream arg0) { super(arg0); // TODO Auto-generated constructor stub } public int read() throws IOException{ int c = 0; if((c = super.read()) != -1){ if(Character.isUpperCase(c)){//把大写字母转成小写 return Character.toLowerCase(c); }else{//其他保持 return c; } } else{ return -1; } } }