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;			
			}
	}
	
	
}
经验分享 程序员 微信小程序 职场和发展