基础 IO

  1. 文件IO流:FileInputStream、FileOutputStream、FileReader、FileWriter
  2. 数组IO流:ByteArrayInputStream、ByteArrayOutputStream、CharArrayReader、CharArrayWriter
  3. 管道IO流:PipedInputStream、PipedOutputStream、PipedReader、PipedWriter
  4. 基本数据类型:DataInputStream、DataOutputStream
  5. 缓冲IO流:BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter
  6. 打印:PrintStream、PrintWriter
  7. 序列化反序列化:ObjectInputStream、ObjectOutputStream
  8. 转换:InputStreamReader、OutputStreamWriter

字节流

  • 读取单个字节,用来处理二进制文件(图片、MP3、视频文件)

alt


字符流

  • 读取单个字符,用来处理文本文件(对二进制文件使用了某种编码,可以阅读)

alt


装饰者模式

  • 把这个装饰者套在被装饰者之上,从而动态扩展被装饰者的功能

alt

例如
  • 实例化一个具有缓存功能的字节流对象时、只需要在FileInputStream 对象上再套一层 BufferedInputStream 对象即可实现
FileInputStream fileInputStream = new FileInputStream(filePath);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);


NIO

  • 主要有三个核心部分:Channel(通道)、Buffer(缓冲区)、Selector
  • 传统 IO 基于字节流和字符流进行操作,面向流的。NIO 基于 Channel、Buffer进行操作,面向缓冲区的
  • 过程:数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择区)用于监听多个通道事件,例如:连接打开、数据到达等。因此,单个线程可以监听多个数据通道

alt



IO 模型



零拷贝