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;
}
}
}
