初探Java IO 系統

Java的IO家族很是繁榮,剛接觸有點讓人摸不清關係,今天讓我們來認識一下他們。
認識他們之前,我們先來了解一下什麼是數據流,很顯然,從字面上理解,流動的數據,你可以想象一下,水庫裏的水就是數據,我現在想把這些水弄到另外一個地方,我就要挖一個類似管道的東西,水(數據)就會不斷地流到另一端,這我們稱爲水流,數據流和它一樣
我們要認識一個龐大的體系,首先要從整體來認識他,不然從一些細枝末葉去探究很容易在裏面打轉。
首先,Java中的IO體系分爲3大塊:
一、流式部分
二、非流式部分
三、其他
我們着重看流式部分
流式部分分爲兩大塊
① 字節流:顧名思義,就是數據流中最小的數據單元是字節
② 字符流:同理,數據流中最小單元是字符
然後我們再來看看Java中處理字節流和字符流都有哪些類
Java中有4個基本的類:InputStream、OutputStream、Reader、Writer類,InputStream和OutputStream是處理字節流的,Reader和Writer是處理字符流的。我們可以看出,這種設計很是有對稱美
現在我們可以大致的畫一下Java IO系統的整體框架
這裏寫圖片描述
我們打開源碼可以看到InputStream他是一個抽象類,如下:

public abstract class InputStream implements Closeable{}

在其中定義了幾個方法,其中比較重要且常用的是:

 public abstract int read()//從輸入流中讀取字節數據,如果返回-1,則說明無字節可讀,讀取完畢
public int read(byte b[])//從輸入流中讀取一定數量的字節,然後把它們存到緩衝字節數組b中
public int read(byte b[], int off, int len)//從輸入流中最多讀取長度爲len的字節數據,然後存到起始位置爲 off 的字節數組b中,
public void close()// 使用完流之後,必須關閉該流

同理,我們再來看看OutputStream

public abstract class OutputStream implements Closeable, Flushable{}

同樣地,OutputStream也是抽象的,必須依靠子類實現各種功能
其中的重要方法有:

public abstract void write(int b)//給輸出流中寫入特定的字節
public void write(byte b[])// 從這個字節數組b中給輸出流中寫入長度爲b.length的字節
public void write(byte b[], int off, int len)//從字節數組b的特定位置 off 開始,給輸出流中寫入 長度爲len的一些字節
public void flush()//把數據緩衝區中數據全部輸出,清空緩衝區
 public void close()// 關閉流

我們可以看出,這兩個抽象類的一些方法也是非常對稱的,但是我們怎樣確定我們要的是輸入流還是輸出流呢?方法很簡單,把你想象成你的Java程序,當你需要從某個地方讀取東西的時候,你就需要InputStream,而你需要往某個地方寫東西的時候,你就需要OutputStream(某個地方通常是磁盤,往磁盤讀寫,也有可能是網絡等)
今天就寫到這,先對IO有一個初步大概的認識,以後有機會深入瞭解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章