打卡日期(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 继承
区别 | 装饰模式 | 继承 |
---|---|---|
目标 | 对象 | 类 |
子类 | 不需要 | 对类扩展,需要子类 |
状态 | 动态 | 静态编译 |
职责 | 运行时分配职责 | 编译时分派职责 |
灵活性 | 灵活 | 很多子类,缺乏灵活性 |