## Java IO Overview
目录
开始分析 JavaIO 的源码!不过要先弄清楚 Java IO 的体系结构。
本文参考这里,给 Java IO 包里各式各样的类做了一个 holy high 的分组。
Input and Output - Source and Destination
时刻谨记,所谓的 Input 和 Output 都是从内存(程序)的角度来说的。
Java 的 IO 包从 源(source) 中读取数据,写入数据到 目的(destination)。最常用的数据 sources 和 destinations 如下:
- 文件 Files
- 管道 Pipes
- 网络连接 Network Connections
- 内存缓存 (例如,数组)
- 标准输入输出 System.in, System.out, System.error
读取和写入数据的流向图如下:
Streams
IO Streams (流) 是 Java IO 中的概念。一个 Stream 可以认为是 数据的流动(可以把数据想象成水,Stream 就是水管)。Stream 可以连接到 源数据 或者是 目标数据。Stream 可以是基于字节的(字节流,读写字节),也可以是基于字符的(字符流,读写字符)。
The InputStream, OutputStream, Reader and Writer
从 source 读取数据的程序需要使用到 InputStream 或者 Reader。往 destination 写入数据的程序需要使用到 OutputStream 或者 Writer。
InputStream / Reader 连接到 源数据。OutputStream / Writer 连接到 目标数据。
Java IO Purposes and Features
Java IO 包含了很多 InputStream, OutputStream, Reader 和 Writer 类的子类。之所以如此,是因为这些类的作用各不相同。现总结一下 IO 类的不同作用:
- 文件访问 File Access
- 网络访问 Network Access
- 内存访问 Internal Memory Buffer Access
- 线程间通信 Inter-Thread Communication (Pipes)
- 缓存 Buffering
- 过滤器 Filtering
- 解析器 Parsing
- 读写文本 Reading and Writing Text (Readers / Writers)
- 读写基本数据类型 Reading and Writing Primitive Data (long, int etc.)
- 读写对象 Reading and Writing Objects
当阅读 Java IO 源码的时候,很容易就知道了这些作用,这样在实际运用的时候,针对不同的目的,就能使用不同的类了。
Java IO Class Overview Table
下表列出了 Java IO 中大部分的类,按 Input 和 Output, 字节流和字符流分组,同时也标出了这些类可能的作用。
Byte Based | Character Based | |||
Input | Output | Input | Output | |
Basic | InputStream | OutputStream | Reader InputStreamReader | Writer OutputStreamWriter |
Arrays | ByteArrayInputStream | ByteArrayOutputStream | CharArrayReader | CharArrayWriter |
Files | FileInputStream RandomAccessFile | FileOutputStream RandomAccessFile | FileReader | FileWriter |
Pipes | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter |
Buffering | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
Filtering | FilterInputStream | FilterOutputStream | FilterReader | FilterWriter |
Parsing | PushbackInputStream StreamTokenizer | PushbackReader LineNumberReader | ||
Strings | StringReader | StringWriter | ||
Data | DataInputStream | DataOutputStream | ||
Data - Formatted | PrintStream | PrintWriter | ||
Objects | ObjectInputStream | ObjectOutputStream | ||
Utilities | SequenceInputStream |