Java之路(5)--學學java.io的設計理念

 

原文出處:

http://blog.csdn.net/bluesmile979/archive/2008/10/20/3111403.aspx


Java號稱提供了強大的io控制,恩,實際上也確實挺強大的。但是,面對着那麼多的io類,開始的時候會有些頭暈。

 

Java爲了使用盡量少的類提供儘量強大的io功能,在io設計的時候採用了Decorator也就是中文中的裝飾模式。裝飾模式是在不必改變原類文件和使用繼承的情況下,動態的擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。沒學過設計模式不要緊,從名稱上就能感知12了。簡單來說,就是包裝,外掛,以使其除了本身的基本功能使外同時可以具有一些客戶需要的特定功能。基本功能由本體Component實現。包裝,外掛由Decorator來實現。下面是DecoratorUML圖。

 

 

 

看不懂也沒有關係,有一個比較簡單的示意圖。

Decorator1

Decorator2

Component

 

 

 

 

就是一層一層的包裝,還是比較容易理解的吧?好了,先記住上面這個比較容易理解的圖例吧。接下來我們先給Javaio歸歸類。

 

    Javaio裏面最基礎的是InputStream,OutputStream,Reader,Writer,其中Stream讀取的是單字節,它將數據讀取到byte[]裏面,它讀取的是字符對應的acsii碼。Reader,Writer讀取的是雙字節,它讀取的是實際的字符,它可以設定採取什麼編碼來進行讀寫,它提供了readLine()方法。

 

    好了,基礎的兩大陣營出來了,讀取ascii碼的Stream與讀取實際字符的XXXer

 

    然後是一些前綴,常用的有Buffered,File,那麼前綴後綴連接起來,這個io類的功能就出來了。BufferedInputStream就是提供緩衝功能支持的讀取ascii碼的類,FileInputStream就是從文件讀取ascii碼的類,那麼誰是實體,誰是裝飾,很明顯。

 

    我們頭腦裏要有一個最基礎的概念,就是總要有一個什麼類來負責跟具體的標準輸入輸出(比如文件,比如控制檯)打交道,實現這個最基本的跟便準輸入輸出打交道的類就是Component,再此之上,我們需要的功能就要考慮是否有對應的Decorator幫忙實現,比如緩衝功能。然後,就很簡單了。

 

   BufferedInputStream bis = new BufferedInputStream(new FileInputStream());

 

一層一層的包裝,包裝多少層隨便你,我們要做的就是確認我要跟文件打交道,那麼FileInputStream是最基本的,需要被包裝的,其他需要的功能,去查找那各類實現了這個功能,然後包裝一下就OK了。

另外還有一個事情是我們需要知道的。StreamXXXer兩大陣營,他們各自提供各自的功能,但是他們可能需要溝通,這裏Javaio提供了StreamXXXer類,比如

 

new InputStreamReader(System.in);這樣就可以直接從控制檯讀取字符或者輸入行內容了。

發佈了14 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章