欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
從Decorator,Adapter模式看Java/IO庫(一)

我想任何一本介紹模式的書(shū)在講到Decorator模式的時(shí)候不能不提到它的實(shí)際應用--在Java/IO庫里面的應用,<<Java 與模式>>這本書(shū)也不例外,有點(diǎn)不一樣的是,這本書(shū)在介紹的時(shí)候有個(gè)專(zhuān)題,是從兩個(gè)模式來(lái)看Java/IO庫,完這個(gè)專(zhuān)題后,個(gè)人感覺(jué)對 Java/IO庫有了全新的認識同時(shí)也加深了Decorator模式跟Adapter適配器模式的理解,現和大家分享下這個(gè)在我看來(lái)很偉大的成果,同時(shí)說(shuō)明下,以下大部分文字跟圖片是來(lái)自<<Java與模式>>這本書(shū)。

 一.引子(概括地介紹Java的IO)

 無(wú)論是哪種編程語(yǔ)言,輸入跟輸出都是重要的一部分,Java也不例外,而且Java將輸入/輸出的功能和使用范疇做了很大的擴充。它采用了流的機制來(lái)實(shí)現輸入/輸出,所謂流,就是數據的有序排列,而流可以是從某個(gè)源(稱(chēng)為流源或Source of Stream)出來(lái),到某個(gè)目的地(稱(chēng)為流匯或Sink of Stream)去的。由流的方向,可以分成輸入流和輸出流,一個(gè)程序從輸入流讀取數據向輸出流寫(xiě)數據。

 如,一個(gè)程序可以用FileInputStream類(lèi)從一個(gè)磁盤(pán)文件讀取數據,如下圖所示:

 

 像FileInputStream這樣的處理器叫做流處理器,它就像流的管道一樣,從一個(gè)流源吸入某種類(lèi)型的數據,并輸出某種類(lèi)型的數據。上面這種示意圖叫做流的管道圖。

 同樣道理,也可以用FileOutputStream類(lèi)向一個(gè)磁盤(pán)文件寫(xiě)數據,如下圖所示:

 

 

 在實(shí)際應用這種機制并不沒(méi)有太大的用處,程序需要寫(xiě)出地通常是非常結構化的信息,因此這些byte類(lèi)型的數據實(shí)際上是一些數值,文字,源代碼等。 Java的I/O庫提供了一個(gè)稱(chēng)做鏈接(Chaining)的機制,可以將一個(gè)流處理器跟另一個(gè)流處理器首尾相接,以其中之一的輸出為輸入,形成一個(gè)流管道的鏈接。

 例如,DataInputStream流處理器可以把FileInputStream流對象的輸出當作輸入,將Byte類(lèi)型的數據轉換成Java的原始類(lèi)型和String類(lèi)型的數據。如下圖所示:

 

類(lèi)似地,向一個(gè)文件寫(xiě)入Byte類(lèi)型的數據不是一個(gè)簡(jiǎn)單的過(guò)程。一個(gè)程序需要向一個(gè)文件里寫(xiě)入的數據往往都是結構化的,而B(niǎo)yte類(lèi)型則是原始類(lèi)型。因此在寫(xiě)的時(shí)候必須經(jīng)過(guò)轉換。DataOutputStream流處理器提供了接收了原始數據類(lèi)型和String數據類(lèi)型,而這個(gè)流處理器的輸出數據則是Byte類(lèi)型。也就是說(shuō)DataOutputStream可以將源數據轉換成Byte類(lèi)型的數據,再輸出來(lái)。

 這樣一來(lái),就可以將DataOutputStream與FileOutputStream鏈接起來(lái),這樣程序就可以將原始數據類(lèi)型和String類(lèi)型的源數據寫(xiě)入這個(gè)鏈接好的雙重管道里面,達到將結構化數據寫(xiě)到磁盤(pán)文件里面的目的,如下圖所示:

 

 這又是鏈接的所發(fā)揮的大作用。

 流處理器所處理的流必定都有流源,而如果將流類(lèi)所處理的流源分類(lèi)的話(huà),基本可以分成兩大類(lèi):

 第一 數組,String,File等,這一種叫原始流源。

 第二 同樣類(lèi)型的流用做鏈接流類(lèi)的流源,叫鏈接流源。

 二 Java I/O庫的設計原則

 Java語(yǔ)言的I/O庫是對各種常見(jiàn)的流源,流匯以及處理過(guò)程的抽象化??蛻?hù)端的Java程序不必知道最終的流源,流匯是磁盤(pán)上的文件還是數組等;也不必關(guān)心數據是否經(jīng)過(guò)緩沖的,可否按照行號讀取等處理的細節。

 書(shū)中提到了,對于第一次見(jiàn)到Java/IO庫的人,無(wú)不因為這個(gè)庫的龐雜而感到困惑;而對于熟悉這個(gè)庫的人,而又常常為這個(gè)庫的設計是否得當而爭論不體。書(shū)的作者提出自己的意見(jiàn),要理解Java I/O這個(gè)龐大而復雜的庫,關(guān)鍵是要掌握兩個(gè)對稱(chēng)性跟兩個(gè)設計模式模式。

Java I/O庫具有兩個(gè)對稱(chēng)性,它們分別是:

?。薄≥斎耄敵鰧ΨQ(chēng)性,比如InputStream和OutputStream各自占據Byte流的輸入與輸出的兩個(gè)平行的等級結構的根部。而Reader和Writer各自占據Char流的輸入與輸出的兩個(gè)平行的等級結構的根部。

?。病yte-char對稱(chēng),InputStream和Reader的子類(lèi)分別負責Byte和Char流的輸入;OutputStream和Writer的子類(lèi)分別負責Byte和Char流的輸出,它們分別形成平行的等級結構。

Java I/O庫的兩個(gè)設計模式:

  Java的I/O庫總體設計是符合裝飾者模式(Decorator)跟適配器模式(Adapter)的。如前所述,這個(gè)庫中處理流的類(lèi)叫做流類(lèi)。引子里所談到的FileInputStream,FileOutputStream,DataInputStream及DataOutputStream都是流處理器的例子。

?。薄⊙b飾者模式:在由InputStream,OutputStream,Reader和Writer代表的等級結構內部,有一些流處理器可以對另一些流處理器起到裝飾作用,形成新的,具有改善了的功能的流處理器。裝飾者模式是Java I/O庫的整體設計模式。這樣的一個(gè)原則是符合裝飾者模式的,如下圖所示:

2 適配器模式:在由InputStream,OutputStream,Reader和Writer代表的等級結構內部,有一些流處理器是對其它類(lèi)型的流源的適配。這就是適配器模式的應用,如下圖所示。

  

 適配器模式應用到了原始流處理器的設計上面,構成了I/O庫所有流處理器的起點(diǎn)。

 今天晚上先到這了,明天再接著(zhù)細看兩種設計模式具體是怎樣在I/O庫中被應用的。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Java基礎筆記 – IO流分類(lèi)詳細介紹和各種字節流類(lèi)介紹與使用 過(guò)濾流 字節流 | IT...
數據流:將基本類(lèi)型數據和字符串類(lèi)型數據寫(xiě)入到磁盤(pán)
Android上傳文件到服務(wù)器
java四類(lèi)八種基本數據類(lèi)型
java socket通信
BufferedImage與byte[]互轉
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久