基础 IO
- 文件IO流:FileInputStream、FileOutputStream、FileReader、FileWriter
- 数组IO流:ByteArrayInputStream、ByteArrayOutputStream、CharArrayReader、CharArrayWriter
- 管道IO流:PipedInputStream、PipedOutputStream、PipedReader、PipedWriter
- 基本数据类型:DataInputStream、DataOutputStream
- 缓冲IO流:BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter
- 打印:PrintStream、PrintWriter
- 序列化反序列化:ObjectInputStream、ObjectOutputStream
- 转换:InputStreamReader、OutputStreamWriter
字节流
- 读取单个字节,用来处理二进制文件(图片、MP3、视频文件)
字符流
- 读取单个字符,用来处理文本文件(对二进制文件使用了某种编码,可以阅读)
装饰者模式
- 把这个装饰者套在被装饰者之上,从而动态扩展被装饰者的功能
例如
- 实例化一个具有缓存功能的字节流对象时、只需要在FileInputStream 对象上再套一层 BufferedInputStream 对象即可实现
FileInputStream fileInputStream = new FileInputStream(filePath);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
NIO
- 主要有三个核心部分:Channel(通道)、Buffer(缓冲区)、Selector
- 传统 IO 基于字节流和字符流进行操作,面向流的。NIO 基于 Channel、Buffer进行操作,面向缓冲区的
- 过程:数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择区)用于监听多个通道事件,例如:连接打开、数据到达等。因此,单个线程可以监听多个数据通道
IO 模型
零拷贝