IO庫(kù)設(shè)計(jì)模式

IO庫(kù)設(shè)計(jì)模式

ID:40317914

大?。?29.99 KB

頁(yè)數(shù):10頁(yè)

時(shí)間:2019-07-31

IO庫(kù)設(shè)計(jì)模式_第1頁(yè)
IO庫(kù)設(shè)計(jì)模式_第2頁(yè)
IO庫(kù)設(shè)計(jì)模式_第3頁(yè)
IO庫(kù)設(shè)計(jì)模式_第4頁(yè)
IO庫(kù)設(shè)計(jì)模式_第5頁(yè)
資源描述:

《IO庫(kù)設(shè)計(jì)模式》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。

1、JavaI/O庫(kù)的兩個(gè)設(shè)計(jì)模式:Java的I/O庫(kù)總體設(shè)計(jì)是符合裝飾者模式(Decorator)跟適配器模式(Adapter)的。FileInputStream,F(xiàn)ileOutputStream,DataInputStream及DataOutputStream都是流處理器的例子。?1 裝飾者模式:在由InputStream,OutputStream,Reader和Writer代表的等級(jí)結(jié)構(gòu)內(nèi)部,有一些流處理器可以對(duì)另一些流處理器起到裝飾作用,形成新的,具有改善了的功能的流處理器。裝飾者模式是JavaI/O庫(kù)的整體設(shè)計(jì)模式。這樣的一個(gè)原則是符合裝飾者模式的,如下圖

2、所示:2 適配器模式:在由InputStream,OutputStream,Reader和Writer代表的等級(jí)結(jié)構(gòu)內(nèi)部,有一些流處理器是對(duì)其它類型的流源的適配。這就是適配器模式的應(yīng)用,如下圖所示?!  ∵m配器模式應(yīng)用到了原始流處理器的設(shè)計(jì)上面,構(gòu)成了I/O庫(kù)所有流處理器的起點(diǎn)。??三 裝飾模式的應(yīng)用? 為什么不用繼承而用裝飾模式 JavaI/O庫(kù)需要很多性能的各種組合,如果說(shuō)這些性能的組合是通過(guò)繼承方式來(lái)實(shí)現(xiàn)的話,那么每一種組合都需要一個(gè)類,這樣就會(huì)出現(xiàn)大量重復(fù)性問(wèn)題的出現(xiàn),從而使類數(shù)目“爆炸”。而如果采用裝飾模式,那么不僅類的數(shù)目大減少了,性能的重復(fù)也可以減

3、至到最少。所以裝飾模式是JavaI/O庫(kù)的基本模式?!∮捎谘b飾模式的引用,造成了靈活性和復(fù)雜都大大增加了,必須理解JavaI/O庫(kù)是由一些基本的原始流處理器和圍繞它們的裝飾流處理器所組成的,這樣可以在學(xué)習(xí)和使用JavaI/O庫(kù)時(shí)達(dá)到事半功倍的效果?!? 首先是InputStream類型中的裝飾模式: InputStream有七個(gè)直接的具體子類,有四個(gè)屬于FilterInputStream的具體子類,如下圖所示:  上圖中所有的類都叫做流處理器,這個(gè)圖就叫做(InputStream類型的)流處理器圖?! 「鶕?jù)輸入流的源的類型,可以將這些流類分成兩種,即原始流類(O

4、riginalStream)和鏈接流處理器(WrapperStream)。?  原始流處理器  原始流處理器接收一個(gè)Byte數(shù)組對(duì)象,String對(duì)象,F(xiàn)ileDiscriptor對(duì)象或者不同類型的流源對(duì)象,根據(jù)上面的圖,原始流處理器包括以下四種:  ByteArrayInputStream:為多線程的通信提供緩沖區(qū)操作功能,接收一個(gè)Byte數(shù)組作為流的源?! ileInputStream:建立一個(gè)與文件有關(guān)的輸入流。接收一個(gè)File對(duì)象作為流的源。  PipedInputStream:可以與PipedOutputStream配合使用,用于讀入一個(gè)數(shù)據(jù)管道的數(shù)

5、據(jù),接收一個(gè)PipedOutputStream作為源?! tringBufferInputStream:將一個(gè)字符串緩沖區(qū)轉(zhuǎn)換為一個(gè)輸入流。接收一個(gè)String對(duì)象作為流的源。(JDK幫助文檔上說(shuō)明:已過(guò)時(shí)。此類未能正確地將字符轉(zhuǎn)換為字節(jié)。從JDK1.1開(kāi)始,從字符串創(chuàng)建流的首選方法是通過(guò)StringReader類進(jìn)行創(chuàng)建。只有字符串中每個(gè)字符的低八位可以由此類使用。)?鏈接流處理器  所謂鏈接流處理器,就是可以接收另一個(gè)流對(duì)象作為源,并對(duì)之進(jìn)行功能擴(kuò)展的類。InputStream類型的鏈接處理器包括以下幾種,它們都接收另一個(gè)InputStream對(duì)象作為流源

6、?! 。ǎ保〧ilterInputStream稱為過(guò)濾輸入流,它將另一個(gè)輸入流作為流源。這個(gè)類的子類包括以下幾種:  BufferedInputStream:用來(lái)從硬盤將數(shù)據(jù)讀入到一個(gè)內(nèi)存緩沖區(qū)中,并從緩沖區(qū)提供數(shù)據(jù)?! ataInputStream:提供基于多字節(jié)的讀取方法,可以讀取原始類型的數(shù)據(jù)。  LineNumberInputStream:提供帶有行計(jì)數(shù)功能的過(guò)濾輸入流?! ushbackInputStream:提供特殊的功能,可以將已經(jīng)讀取的字節(jié)“推回”到輸入流中。 ?。ǎ玻㎡bjectInputStream可以將使用ObjectInputStre

7、am串行化的原始數(shù)據(jù)類型和對(duì)象重新并行化?! 。ǎ常㏒eqcueneInputStream可以將兩個(gè)已有的輸入流連接起來(lái),形成一個(gè)輸入流,從而將多個(gè)輸入流排列構(gòu)成一個(gè)輸入流序列?! 〕橄蠼Y(jié)構(gòu)圖  按照上面的這種原始流處理器和鏈接流處理器的劃分,可以用下面的結(jié)構(gòu)圖來(lái)描述它們之間的關(guān)系?! ? 上面的流處理器圖跟裝飾模式的結(jié)構(gòu)圖有著顯而易見(jiàn)的相同之處。實(shí)際上InputStream類型的流處理器結(jié)構(gòu)確實(shí)符合裝飾模式?! ⊙b飾模式結(jié)構(gòu)圖   對(duì)于上圖FilterInputStream查看JDK1.6源代碼,部分代碼如下:Java代碼??1.public?class?Fi

8、lterInputStr

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。