閱讀493 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java IO 概述

在這一小節,我會試著給出Java IO(java.io)包下所有類的概述。更具體地說,我會根據類的用途對類進行分組。這個分組將會使你在未來的工作中,進行類的用途判定時,或者是為某個特定用途選擇類時變得更加容易。

輸入和輸出 – 數據源和目標媒介

術語“輸入”和“輸出”有時候會有一點讓人疑惑。一個應用程序的輸入往往是另外一個應用程序的輸出。那麼OutputStream流到底是一個輸出到目的地的流呢,還是一個產生輸出的流?InputStream流到底會不會輸出它的數據給讀取數據的程序呢?就我個人而言,在第一天學習Java IO的時候我就感覺到了一絲疑惑。(校對注:輸入流可以理解為向內存輸入,輸出流可以理解為從內存輸出)

為了消除這個疑惑,我試著給輸入和輸出起一些不一樣的別名,讓它們從概念上與數據的來源和數據的流向相聯係。

Java的IO包主要關注的是從原始數據源的讀取以及輸出原始數據到目標媒介。以下是最典型的數據源和目標媒介:

  • 文件
  • 管道
  • 網絡連接
  • 內存緩存
  • System.in, System.out, System.error(注:Java標準輸入、輸出、錯誤輸出)

下麵這張圖描繪了一個程序從數據源讀取數據,然後將數據輸出到其他媒介的原理:

無標題1

在Java IO中,流是一個核心的概念。流從概念上來說是一個連續的數據流。你既可以從流中讀取數據,也可以往流中寫數據。流與數據源或者數據流向的媒介相關聯。在Java IO中流既可以是字節流(以字節為單位進行讀寫),也可以是字符流(以字符為單位進行讀寫)。

類InputStream, OutputStream, Reader 和Writer

一個程序需要InputStream或者Reader從數據源讀取數據,需要OutputStream或者Writer將數據寫入到目標媒介中。以下的圖說明了這一點:

無標題2

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類的表格。

QQ截圖20141020174145

最後更新:2017-05-23 14:35:31

  上一篇:go  並發網每月TOP10文章
  下一篇:go  Java IO: 文件