一、Input 和 Output
IO
是 Input
和 Output
的简称。输入和输出在概念上有点模糊,一个应用程序的输入部分往往是另一个部分的输出。
Java 的 IO 包本身的主要关注点在于,从一个地方读取原始数据和向目的地写入数据。IO 相关的概念有:
- 文件(File)
- 管道(Pipes)
- 网络连接(Network Connections)
- 内存缓冲区,比如数组(In-memory Buffers)
- System.in, System.out, System.error
下面的图说明了一个程序从一个地方读数据并且写数据到目的地的原理:
二、流(Stream)
IO 流是 Java IO 的核心概念。流是一个概念上的无休止的数据流。你既可以从一个流读取数据也可以写入到一个流。流用来连接数据源与目标地。Java IO流基于字节流和字符流。
三、The InputStream, OutputStream, Reader and Writer
一个程序从数据源读取数据的时候,需要 InputStream或者Reader。程序写数据的时候,就需要OutputStream或Writer。具体可以参见下面图例:
四、Java IO的目的和特性
Java IO中有很多InputStream, OutputStream, Reader和Writer的子类,这些子类会用来处理不同的需求。这就是为什么有这么多类的原因。具体的用法主要有以下一些场景:
- 文件
- 网络流
- 内存缓冲区
- 管道
- 缓冲
- 过滤
- 解析
- 读写文本
- 读写原始类型的数据(long等等)
- 读写对象
上面的这些可以让你在阅读Java IO相关类的时候清晰一些。更能理解这些类的目的都是什么。
五、Java IO相关类概览
字节输入流 | Output | 字符输入流 | Output | |
---|---|---|---|---|
基础类 | InputStream | OutputStream | Reader/InputStreamReader | Writer/OutputStreamWriter |
数组 | ByteArrayInputStream | ByteArrayOutputStream | CharArrayReader | CharArrayWriter |
文件 | FileInputStream/RandomAccessFile | FileOutputStream/RandomAccessFile | FileReader | FileWriter |
管道 | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter |
Buffer | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
Filter | FilterInputStream | FilterOutputStream | FilterReader | FilterWriter |
解析 | PushbackInputStream/StreamTokenizer | PushbackReader/LineNumberReader | ||
String | StringReader | StringWriter | ||
Data | DataInputStream | DataOutputStream | ||
Data - Formatted | PrintStream | PrintWriter | ||
Objects | ObjectInputStream | ObjectOutputStream | ||
实用工具 | SequenceInputStream |
参考文档:
- http://tutorials.jenkov.com/java-io/overview.html