《Netty学习打卡--从小白到放弃》----- 20 - netty 之 BIO 系统

打卡日期(2019-07-23)

学习要点

-   1.理解java IO系统
-   2.java 流的两种类型
-   3.java 流的分类
-   4.java IO流的处理逻辑
-   5.InputStream 类的层次
-   6.OutPutStream 类的层次
-   7.java IO流的链接
-   8.理解java IO的设计原则和设计模式
-   9.装饰模式
-   10.装饰模式 VS 继承

1.理解java IO系统

    I/O 顾名思义Input/Output 输入/输出,其参照类是我们的程序,往程序里面写入内容就是输入,从程序往外写出内容就是输出。

2.java 流的两种类型

    I/O流分为两类,字节流字符流,在最底层,所有的输入和输出都是字节流

3.java 流的分类

  • 节点流:从特定的地方读写的流,例如:磁盘或者文件
  • 过滤流:使用节点流作为输入或者输出,过滤流是使用一个已经存在的输入流或者输出流链接创建的。

4.java IO流的处理逻辑

InputStream逻辑
-   1.open a stream  (打开一个流)
-   2.while more information (循环读取信息)
-   3.read information (写入信息)
-   4.close stream (关闭信息)
OutputStream逻辑
-   1.open a stream
-   2.while more information
-   3.write information
-   4.close stream

5.InputStream 类的层次

graph RL
A[FileInputStream]-->B[InputStream]
C[ByteArrayInputStream]-->B
D[FilterInputStream]--过滤流-->B
E[ObjectInputStream]-->B
F[PipedInputStream]-->B
G[SequenceInputStream]-->B
H[StringBufferInputStream]-->B
I[DataInputStream]-->D
J[BufferedInputStream]--缓冲流-->D
K[LineNumberInputStream]-->D
L[PushbackInputStream]-->D

6.OutPutStream 类的层次

graph RL
B[FileOutputStream]-->A[OutputStream]
C[ByteArrayOutputStream]-->A
D[FilterOutputStream]--过滤流-->A
E[ObjectOutputStream]-->A
F[PipedOutputStream]-->A
H[DataOutputStream]-->D
I[BufferedOutputStream]--缓存-->D
G[PrintStream]-->D

7.java IO流的链接

InputStream chain
graph TB
B[File]--文件中获取输入字节-->A[FileInputStream]
A--缓冲-->C[BufferedInputStream]
C--将字节转换成java基本类型-->D[DataInputStream]
D-->E[数据]
OutputStream chain
graph TB
B[数据]--往输出流中写入数据-->A[DataOutputStream]
A--将基本数据类型转换成字节并保存到缓存-->C[BufferedOutputStream]
C--从缓存中读取数据并写入流-->D[FileOutputStream]
D--将数据从流中写出到文件-->E[数据]

8.理解java IO的设计原则和设计模式

    java IO库提供了一个称作链接的机制,可以将一个流与另一个流收尾相连,形成一个流管道的链接。这种模式就被称作为装饰模式。通过这种模式可以动态的增加流的功能。

9.装饰模式

    装饰模式可以对客户端透明的方式扩展对象的功能,是继承的另外一种替代方案。给一个对象动态的附加更多的职责。装饰模式有如下几个角色:

  • 抽象构件角色:给出一个抽象接口,以规范准备附加责任的对象
  • 具体构件角色:定义一个将要接收附加责任的类,实现抽象构件角色的接口
  • 装饰角色:持有一个抽象构件角色对象的引用,并定义一个与抽象构件接口一致的接口
  • 具体装饰角色:负责给构件对象附加责任

10.装饰模式 VS 继承

区别 装饰模式 继承
目标 对象
子类 不需要 对类扩展,需要子类
状态 动态 静态编译
职责 运行时分配职责 编译时分派职责
灵活性 灵活 很多子类,缺乏灵活性

猜你喜欢

转载自blog.csdn.net/u011291990/article/details/96993939