Java IO 概述
在這一小節,我會試著給出Java IO(java.io)包下所有類的概述。更具體地說,我會根據類的用途對類進行分組。這個分組將會使你在未來的工作中,進行類的用途判定時,或者是為某個特定用途選擇類時變得更加容易。
輸入和輸出 – 數據源和目標媒介
術語“輸入”和“輸出”有時候會有一點讓人疑惑。一個應用程序的輸入往往是另外一個應用程序的輸出。那麼OutputStream流到底是一個輸出到目的地的流呢,還是一個產生輸出的流?InputStream流到底會不會輸出它的數據給讀取數據的程序呢?就我個人而言,在第一天學習Java IO的時候我就感覺到了一絲疑惑。(校對注:輸入流可以理解為向內存輸入,輸出流可以理解為從內存輸出)
為了消除這個疑惑,我試著給輸入和輸出起一些不一樣的別名,讓它們從概念上與數據的來源和數據的流向相聯係。
Java的IO包主要關注的是從原始數據源的讀取以及輸出原始數據到目標媒介。以下是最典型的數據源和目標媒介:
- 文件
- 管道
- 網絡連接
- 內存緩存
- System.in, System.out, System.error(注:Java標準輸入、輸出、錯誤輸出)
下麵這張圖描繪了一個程序從數據源讀取數據,然後將數據輸出到其他媒介的原理:
流
在Java IO中,流是一個核心的概念。流從概念上來說是一個連續的數據流。你既可以從流中讀取數據,也可以往流中寫數據。流與數據源或者數據流向的媒介相關聯。在Java IO中流既可以是字節流(以字節為單位進行讀寫),也可以是字符流(以字符為單位進行讀寫)。
類InputStream, OutputStream, Reader 和Writer
一個程序需要InputStream或者Reader從數據源讀取數據,需要OutputStream或者Writer將數據寫入到目標媒介中。以下的圖說明了這一點:
InputStream和Reader與數據源相關聯,OutputStream和writer與目標媒介相關聯。
Java IO的用途和特征
Java IO中包含了許多InputStream、OutputStream、Reader、Writer的子類。這樣設計的原因是讓每一個類都負責不同的功能。這也就是為什麼IO包中有這麼多不同的類的緣故。各類用途匯總如下:
- 文件訪問
- 網絡訪問
- 內存緩存訪問
- 線程內部通信(管道)
- 緩衝
- 過濾
- 解析
- 讀寫文本 (Readers / Writers)
- 讀寫基本類型數據 (long, int etc.)
- 讀寫對象
當通讀過Java IO類的源代碼之後,我們很容易就能了解這些用途。這些用途或多或少讓我們更加容易地理解,不同的類用於針對不同業務場景。
Java IO類概述表
已經討論了數據源、目標媒介、輸入、輸出和各類不同用途的Java IO類,接下來是一張通過輸入、輸出、基於字節或者字符、以及其他比如緩衝、解析之類的特定用途劃分的大部分Java IO類的表格。
最後更新:2017-05-23 14:35:31