netty学习笔记之java io回顾一

110 阅读1分钟

netty底层是对Java nio的封装,前面对netty的使用有了个大致的印象,接下来回顾一下java底层的io、nio,为后面netty底层原理打一点基础。

流的分类 节点流:从特定的地方读写的流类,如:磁盘或一块内存取悦。
过滤流:使用节点流作为输入输出。过滤流是使用一个已存在的输入流或者输出流连接创建的。

image.png

java.io包中的InputStream、OutputStream类层次:

image.png

image.png

io流的连接

image.png

装饰模式(Decorator) 我们在使用流的时候常用的写法如下:

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("text.txt")));

底层支撑这种用法的就是装饰模式。

image.png

image.png

image.png 阎宏博士的《JAVA与模式》一书中对装饰模式做了很好的说明,这里搬过来:
装饰模式的类图:

image.png 代码:

抽象构件角色:
public interface Component {
    public void sampleOperation();
}
具体构件角色:
public class ConcreteComponent implements Component {
    @Override
    public void sampleOperation() {
        // 写相关的业务代码
    }
}
装饰角色:
public class Decorator implements Component{
    private Component component;
    
    public Decorator(Component component){
        this.component = component;
    }
    
    @Override
    public void sampleOperation() {
        // 委派给构件
        component.sampleOperation();
    }
}
具体装饰角色A:
public class ConcreteDecoratorA extends Decorator {

    public ConcreteDecoratorA(Component component) {
        super(component);
    }
    
    @Override
    public void sampleOperation() {     super.sampleOperation();
        // 写相关的业务代码
    }
}
具体装饰角色B:
public class ConcreteDecoratorB extends Decorator {

    public ConcreteDecoratorB(Component component) {
        super(component);
    }
    
    @Override
    public void sampleOperation() {      super.sampleOperation();
        // 写相关的业务代码
    }
}