Java中的IO(输入/输出)系统主要可以分为以下几类:
1. 按照数据流向分类
-
输入流(Input Stream):用于从数据源读取数据
-
如:
InputStream
,Reader
-
-
输出流(Output Stream):用于向目标写入数据
-
如:
OutputStream
,Writer
-
2. 按照操作数据类型分类
-
字节流(Byte Stream):以字节(8位)为单位操作数据
-
抽象基类:
InputStream
和OutputStream
-
适用于二进制文件(如图片、音频、视频等)
-
-
字符流(Character Stream):以字符(16位Unicode)为单位操作数据
-
抽象基类:
Reader
和Writer
-
适用于文本文件,能正确处理字符编码
-
3. 按照功能角色分类
-
节点流(Node Stream):直接与数据源/目的地连接的流
-
如:
FileInputStream
,FileReader
-
-
处理流/包装流(Processing Stream):对已存在的流进行包装,提供增强功能
-
如:
BufferedInputStream
,BufferedReader
,DataInputStream
-
4. 按照IO模型分类(Java 1.4+)
-
BIO(Blocking IO):传统的同步阻塞IO
-
NIO(Non-blocking IO/New IO):非阻塞IO,基于通道(Channel)和缓冲区(Buffer)
-
核心类:
Channel
,Buffer
,Selector
-
-
AIO(Asynchronous IO):异步非阻塞IO(Java 7引入)
-
基于回调机制
-
5. 常见IO类
字节流
-
FileInputStream
/FileOutputStream
- 文件字节流 -
ByteArrayInputStream
/ByteArrayOutputStream
- 字节数组流 -
BufferedInputStream
/BufferedOutputStream
- 缓冲字节流 -
DataInputStream
/DataOutputStream
- 基本数据类型流 -
ObjectInputStream
/ObjectOutputStream
- 对象序列化流
字符流
-
FileReader
/FileWriter
- 文件字符流 -
CharArrayReader
/CharArrayWriter
- 字符数组流 -
BufferedReader
/BufferedWriter
- 缓冲字符流 -
InputStreamReader
/OutputStreamWriter
- 字节字符转换流 -
PrintWriter
- 打印流
Java的IO系统设计采用了装饰器模式,可以通过组合不同的流类来实现复杂的功能。