Netty学习前的基础知识(一):Java I/O 系统

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第10天,点击查看活动详情

背景

记录java io基础知识。

基础知识
  1. 流的概念

    Java程序通过来完成输入/输出。流是生产或者消费信息的抽象。流通过Java的输入/输出系统与物理设备连接。尽管与他们连接的物理设备不尽相同,所有流的行为具有同样的方式。这样相同的输入/输出类和方法适用于所有类型的外部设备。这意味着一个输入流能够抽象多种不同类型的输入:从磁盘文件,从键盘或者网络套接字。同样,一个输入流可以输出到控制台,磁盘文件或相连的网络。流是处理输入/输出的一个洁净的方法,例如它不需要代码理解键盘和网络的不同。Java中流的实现是在java.io包定义的类层次结构内部的。

  2. 数据流

    输入/输出时,数据在通信通道中流动。所谓,“数据流(stream)”指的是所有数据通信通道之中,数据的起点和终点。信息的通道就是一个数据流。只要是数据从一个地方流到另外一个地方,这种数据流动的通道都可以称为数据流。

  3. 从程序角度理解 输入/输出是相对于程序来说的。程序在使用数据时所扮演的角色有两个:一个是源,一个是目的。若程序是数据流的源,即数据的提供者,这个数据流对程序来说就是一个“输出数据流”(数据从程序流出)。若程序是数据流的终点,这个数据流对程序而言就是一个“输入数据流”(数据从程序外流向程序)。

  4. 功能分类:输入流和输出流

  5. 结构分类:字节流(以字节为处理单位称面向字节)和字符流(以字符为处理单位成面向字符)。

  6. 字节流的输入流和输出流基础是InputStreamOutputStream这两个抽象类,字节流的输入输出操作由这两个类的子类实现。字符流是Java 1.1 版后新增加的以字符为单位进行输入和输出处理的流,字符流输入输出的基础是抽象类ReaderWriter。在最底层,所有的输入/输出都是字节形式的。于是字符的流只为处理字符提供方便有效的方法。


输入流
  1. 读数据的逻辑过程: a) open a strean b) while more information c) read information d) close the stream
输出流
  1. 写数据的逻辑过程

    a) open a strean b) while more information c) write information d) close the stream

流的分类
  1. 节点流: 从特定的地方(文件)读写的流类,例如:磁盘或者一块内存区域。

  2. 过滤流:使用节点流作为输入或输出。过滤流是使用一个已经存在的输入流或者输出流连接创建的。


java.io包中 InputStream的类层次结构

在这里插入图片描述

java.io包中 OutputStream的类层次结构

在这里插入图片描述

java.io包中 Reader的类层次结构

在这里插入图片描述

java.io包中 Writer的类层次结构

在这里插入图片描述


I/O流的链接

在这里插入图片描述


装饰模式(Decorator)
  1. 装饰模式又名包装(Wrapper)模式

  2. 装饰模式以对客户透明的方式动态的给一个对象附加更多责任。在不创建更多子类的情况下,将对象的功能加以扩展。

  3. 角色: 抽象构件角色(Component):给出一个抽象接口,以规范接口附加责任的对象。 具体构件角色(Concrete Componet):定义一个将要接收附加责任的类。 装饰角色(Decorator):持有一个构件(Component)对象的引用,并定义一个与抽象构件接口一致的接口。 具体装饰角色(Concrete Decorator):负责给构件对象“贴上”附件的责任。

  4. 结构图

在这里插入图片描述 a) 类Decorator实现接口Component,并持有Component引用,并且实现接口中Component接口中的方法,方法内部直接调用引用对象的方法即可。 b) ConcreteDecorator继承Decorator,并且需要一个Component为参数的构建器,调用super(component)。重写方法,方法内部先是调用super引用的方法,然后附加上自己的业务逻辑功能。

小结
  1. 对程序语言设计者来说,设计一个令人满意的I/O(输入输出)系统,是件极艰巨的任务。--《Thinking in java》

  2. 流要么是输入流,要么是输出流。

  3. 过滤流是依赖节点流而进行构建的。

  4. 使用: new CCC(new BBB(new AAA()))。设计原则:装饰设计模式

  5. 装饰模式架构图。Decorator实现Component接口,并持有Component接口的引用。使用 Component component = new ConcreteDecortor2(new ConcreteDecortor1(new ConcreteComponent()));

猜你喜欢

转载自juejin.im/post/7085323699930267661