概述
IO(输入/输出)
Java IO通过 java.io 包下的类和接口来实现,主要包括输入、输出两种IO流。
Java IO流使用了一种装饰器设计模式,它将IO流分为了底层节点流和上层处理流;其中节点流用于和底层的物理存储节点直接关联—不同的物理节点获取节点流的方式可能存在一定的差异,但程序可以把不同的物理节点流包装成统一的处理流,从而允许程序使用统一的输入、输出代码来读取不同的物理存储节点的资源。
Java 7 在 java.nio 及其子包下提供了一系列全新的API,对原有的IO进行升级,也称为 NIO2。
流的分类
- 输入流和输出流
输入流:主要由 InputStream 和 Reader 作为基类
输出流:主要由 OutputStream 和 Writer 作为基类。 - 字节流和字符流:用法几乎完全一致,只是处理的数据单位不一样。
字节流:操作的数据单位是8位的字节; 主要是以 InputStream 和 OutputStream 作为基类;
字符流:操作的数据单位是16位的字符;主要是以 Reader 和 Writer 作为基类; - 节点流 和 处理流: 按照流的角色来划分。
可以向一个特定I/O设备读/写数据的流,称为 节点流。
处理流 则用于对一个已存在的流进行连接或封装,通过封装后的流来实现读/写功能。
输入输出流体系
分类 | 字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 |
---|---|---|---|---|
抽象基类 | InputStream | OutputStream | Reader | Writer |
访问文件 | FileInputStream | FileOutputStream | FileReader | FileWriter |
访问数组 | ByteArrayInputStream | ByteArrayOutputStream | CharArrayReader | CharArrayWriter |
访问管道 | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter |
访问字符串 | StringReader | StringWriter | ||
缓冲流 | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
转换流 | InputStreamReader | OutputStreamWriter | ||
对象流 | ObjectInputStream | ObjectOutputStream | ||
抽象基类 | FilterInputStream | FilterOutputStream | FilterReader | FilterWriter |
打印流 | PrintStream | PrintWriter | ||
推回输入流 | PushbackInputStream | PushbackReader | ||
特殊流 | DataInputStream | DataOutputStream |
说明:
粗体字标出的类代表节点流,必须直接与指定的物理节点关联。
斜体字标出的类代表抽象基类,无法直接创建实例。