隨筆 - 3, 文章 - 152, 評(píng)論 - 17, 引用 - 0
          數(shù)據(jù)加載中……

          [轉(zhuǎn)帖]學(xué)java i/o庫(kù)要掌握的三個(gè)關(guān)鍵知識(shí)點(diǎn)

          大家討論java i/o庫(kù)很久了, PaleSting也剛發(fā)了<<初級(jí) Java I/O 綜述>>系列文章,但我估計(jì)還是有些讀者會(huì)覺得java i/o庫(kù)難以琢磨,所以也來湊湊熱鬧,說說我認(rèn)為的學(xué)習(xí)java i/o庫(kù)要掌握的三個(gè)關(guān)鍵知識(shí)點(diǎn)。

          知識(shí)點(diǎn)一: 四大等級(jí)結(jié)構(gòu)

          java語(yǔ)言的i/o庫(kù)提供了四大等級(jí)結(jié)構(gòu):InputStream,OutputStream,Reader,Writer四個(gè)系列的類。InputStream和OutputStream處理8位字節(jié)流數(shù)據(jù), Reader和Writer處理16位的字符流數(shù)據(jù)。InputStream和Reader處理輸入, OutputStream和Writer處理輸出。大家一定要到J2SE文檔中看看這四大等級(jí)結(jié)構(gòu)的類繼承體系。

          除了這四大系列類,i/o庫(kù)還提供了少數(shù)的輔助類,其中比較重要的是InputStreamReader和OutputStreamWriter。InputStreamReader把InputStream適配為Reader, OutputStreamWriter把OutputStream適配為Writer;這樣就架起了字節(jié)流處理類和字符流處理類間的橋梁。

          您使用i/o庫(kù)時(shí),只要按以上的規(guī)則,到相應(yīng)的類體系中尋找您需要的類即可。

          知識(shí)點(diǎn)二: 適配功能

          java i/o庫(kù)中的繼承不是普通的繼承;它的繼承模式分為兩種,其一就是Adapter模式(具體分析請(qǐng)參見<>一書) 。下面以InputStream類體系為例進(jìn)行說明。

          InputStream有7個(gè)直接子類:ByteArrayInputStream,FileInputStream,PipedInputStream,StringBufferInputStream,FilterInputStream,ObjectInputStreamSequenceInputStream。前四個(gè)采用了Adapter模式,如FileInputStream部分代碼如下:

          Public class FileInputStream extends InputStream

          {

          ??? /* File Descriptor - handle to the open file */

          ??? private FileDescriptor fd;

          ??? public FileInputStream(FileDescriptor fdObj)

          ?{

          ?? ? SecurityManager security = System.getSecurityManager();

          ?? ? if (fdObj == null) {

          ?? ??? throw new NullPointerException();

          ?? ? }

          ?? ? if (security != null) {

          ?? ??? security.checkRead(fdObj);

          ?? ? }

          ?? ??? fd = fdObj;

          ?}

          ?//其他代碼

          }

          可見,FileInputStream繼承了InputStream,組合了FileDescriptor,采用的是對(duì)象Adapter模式。我們學(xué)習(xí)i/o庫(kù)時(shí),主要應(yīng)該掌握這四個(gè)對(duì)象Adapter模式的適配源: ByteArrayInputStream的適配源是Byte數(shù)組, FileInputStream的適配源是File對(duì)象, PipedInputStream的適配源是PipedOutputStream對(duì)象, StringBufferInputStream的適配源是String對(duì)象。其它三個(gè)系列類的學(xué)習(xí)方法與此相同。

          知識(shí)點(diǎn)三: Decorator功能

          InputStream的其它三個(gè)直接子類采用的是Decorator模式,<>中描述得比較清楚,其實(shí)我們不用管它采用什么模式,看看代碼就明白了。 FilterInputStream部分代碼如下:

          Public class FilterInputStream extends InputStream {

          ??? /**

          ???? * The input stream to be filtered.

          ???? */

          ??? protected InputStream in;

          ??? protected FilterInputStream(InputStream in) {

          ?? ???? this.in = in;

          ??? }

          ??? //其它代碼

          }

          ?看清楚沒有? FilterInputStream繼承了InputStream,也引用了InputStream,而它有四個(gè)子類,這就是所謂的Decorator模式。我們暫時(shí)可以不管為什么要用Decorator模式,但我們現(xiàn)在應(yīng)該知道:因?yàn)?/SPAN>InputStream還有其它的幾個(gè)子類,所以我們可以將其它子類作為參數(shù)來構(gòu)造FilterInputStream對(duì)象!這是我們開發(fā)時(shí)常用的功能,代碼示例如下:

          {

          //從密鑰文件中讀密鑰

          ?? SecretKey key=null;??

          ?? ObjectInputStream keyFile=new ObjectInputStream(

          ??????? new FileInputStream("c:\\安全文件\\對(duì)稱密鑰\\yhb.des"));

          ??? key=(SecretKey)keyFile.readObject();

          ??? keyFile.close();

          ?? }

          ?上面的代碼中, ObjectInputStream也是InputStream的子類,也使用了Decorator功能,不過,就算你不懂也不想懂Decorator模式,只要記住本文給出的FilterInputStream 的兩段代碼即可

          掌握了以上三點(diǎn),相信我們已經(jīng)能夠很好的應(yīng)用java i/o庫(kù)。

          posted on 2005-02-12 23:15 閱讀(184) 評(píng)論(0)  編輯  收藏 所屬分類: J2se

          主站蜘蛛池模板: 寻甸| 家居| 太仆寺旗| 宾川县| 云南省| 迁西县| 都匀市| 南陵县| 台南市| 涟水县| 来安县| 井冈山市| 浮梁县| 安义县| 土默特左旗| 潼南县| 原阳县| 鄂尔多斯市| 吉林省| 克什克腾旗| 泰安市| 营口市| 宁陕县| 武隆县| 萍乡市| 固原市| 钟祥市| 满城县| 汝南县| 宁河县| 湖口县| 喀喇| 芜湖县| 苍溪县| 洛隆县| 额济纳旗| 德安县| 胶州市| 闵行区| 穆棱市| 伊川县|