<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 3, 文章 - 152, 評論 - 17, 引用 - 0
    數據加載中……

    [轉帖]學java i/o庫要掌握的三個關鍵知識點

    大家討論java i/o庫很久了, PaleSting也剛發了<<初級 Java I/O 綜述>>系列文章,但我估計還是有些讀者會覺得java i/o庫難以琢磨,所以也來湊湊熱鬧,說說我認為的學習java i/o庫要掌握的三個關鍵知識點。

    知識點一: 四大等級結構

    java語言的i/o庫提供了四大等級結構:InputStream,OutputStream,Reader,Writer四個系列的類。InputStream和OutputStream處理8位字節流數據, Reader和Writer處理16位的字符流數據。InputStream和Reader處理輸入, OutputStream和Writer處理輸出。大家一定要到J2SE文檔中看看這四大等級結構的類繼承體系。

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

    您使用i/o庫時,只要按以上的規則,到相應的類體系中尋找您需要的類即可。

    知識點二: 適配功能

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

    InputStream有7個直接子類:ByteArrayInputStream,FileInputStream,PipedInputStream,StringBufferInputStream,FilterInputStream,ObjectInputStreamSequenceInputStream。前四個采用了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,采用的是對象Adapter模式。我們學習i/o庫時,主要應該掌握這四個對象Adapter模式的適配源: ByteArrayInputStream的適配源是Byte數組, FileInputStream的適配源是File對象, PipedInputStream的適配源是PipedOutputStream對象, StringBufferInputStream的適配源是String對象。其它三個系列類的學習方法與此相同。

    知識點三: Decorator功能

    InputStream的其它三個直接子類采用的是Decorator模式,<>中描述得比較清楚,其實我們不用管它采用什么模式,看看代碼就明白了。 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,而它有四個子類,這就是所謂的Decorator模式。我們暫時可以不管為什么要用Decorator模式,但我們現在應該知道:因為InputStream還有其它的幾個子類,所以我們可以將其它子類作為參數來構造FilterInputStream對象!這是我們開發時常用的功能,代碼示例如下:

    {

    //從密鑰文件中讀密鑰

    ?? SecretKey key=null;??

    ?? ObjectInputStream keyFile=new ObjectInputStream(

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

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

    ??? keyFile.close();

    ?? }

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

    掌握了以上三點,相信我們已經能夠很好的應用java i/o庫。

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

    主站蜘蛛池模板: 国产精品国产自线拍免费软件| 无码一区二区三区免费视频| 久久久久国产亚洲AV麻豆| 亚洲第一成年网站视频| 免费观看男人免费桶女人视频| 亚洲三级中文字幕| 青青青国产在线观看免费| 亚洲情A成黄在线观看动漫软件 | 久久免费视频观看| 国产亚洲A∨片在线观看| 久久国产乱子伦精品免费看| 精品亚洲aⅴ在线观看| 日韩亚洲国产高清免费视频| 又黄又爽一线毛片免费观看 | 亚洲A∨精品一区二区三区下载| 亚洲四虎永久在线播放| 456亚洲人成影院在线观| 国产92成人精品视频免费| 亚洲成年网站在线观看| 色视频色露露永久免费观看| 黄页网址大全免费观看12网站| 免费午夜爽爽爽WWW视频十八禁 | 亚洲AV无码久久精品成人| 日日麻批免费40分钟无码| 国产精品高清视亚洲一区二区| 成人永久免费高清| 美丽的姑娘免费观看在线播放| 亚洲国产精品自产在线播放| 黄床大片免费30分钟国产精品| 1区1区3区4区产品亚洲| 好男人视频社区精品免费| 成人无码区免费A∨直播| 亚洲男女性高爱潮网站| 搡女人真爽免费视频大全| v片免费在线观看| 亚洲精品免费视频| 国产jizzjizz免费视频| 无码人妻一区二区三区免费看| 亚洲AV成人一区二区三区观看 | 午夜亚洲www湿好大| 久久久久国产精品免费免费搜索 |