"流"派家族,一脈相承,派家族一脈相承

來源:互聯網
上載者:User

"流"派家族,一脈相承,派家族一脈相承

(更多內容請關注本人訂閱號:it_pupil)

概述

➤   可以從其中讀入一個位元組序列的對象稱作輸入資料流。(輸入資料流是一個對象,可以從這個對象中讀取一個位元組序列。)

➤    可以向其中寫入一個位元組序列的對象稱作輸出資料流。

➤    讀入或者寫入的位元組序列當然有個來源地和目的地(輸入資料流從哪裡讀取位元組序列的,輸入資料流把位元組序列寫入到哪裡去?),這個來源地和目的地可以是檔案(通常)、網路連結,記憶體塊等。

➤    抽象類別InputStream和OutputStream是輸入輸出資料流階層的基礎(祖宗)。


➤    從上面看出,輸入輸出資料流以位元組為單位,那麼,它們就不方便處理以Unicode形式儲存的資訊(用兩個位元組來編碼一個字元。),所以,從抽象類別Reader和Writer中又繼承出來一個層次架構,專門處理這種Unicode字元。這些類的讀入與寫出是基於兩位元組碼元的,而不是單位元組字元。

 

讀寫位元組

➤    InputStream只有一個抽象的讀方法:abstract int read();

➤    設計具體的輸入資料流,必須覆蓋read()方法。比如:FileInputStream覆蓋read()增加了功能:從檔案中讀位元組。

➤    InputStream還有若干個非抽象的方法,比如,讀入一個位元組數組啊,跳過大量的位元組再開始讀入啊等,而這些方法都調用了抽象的read()方法,所以,各個子類只需要覆蓋read()方法。

➤    與InputSDtream類似,OutputStream定義了抽象寫方法:abstract void write(int b);

➤    完成讀寫後,要調用close方法關閉流,釋放資源。

➤    read和write方法操作時都將被阻塞(安全執行緒),直至位元組確實被讀入或者寫出,可以用available方法事先檢查可讀入的位元組數量。

➤    close在關閉流的同時,還會把輸出緩衝區的字元全部全部強制推出去。如果不關閉,那麼緩衝區的最後留下的資料可能永遠不會傳送出去了。

➤    可以用flush()方法強制把緩衝區的資料沖刷出去。

 

完整的流家族

➤    讀寫單個位元組或位元組數組:InputStream和OutputStream。

➤    讀寫字串和數字:擴充InputStream和OutputStream,產生豐富的子類,如:

         DataInputStream和DataOutputStream:以二進位格式讀寫所有的Java基本類型。

       ZipInputStream,ZipOutputStream:讀寫Zip檔案。

➤    上面不論是祖宗還是子孫,均以位元組或者位元組數組為讀取目標。讀取Unicode文本呢(以雙位元組為碼元):使用Reader和Writer的子類。

 

組合流過濾器

➤    FileInputStream可以按位元組讀取檔案中的資料,但是沒法讀取數實值型別。

➤   DataInputStream可以讀入數實值型別(readDouble()等),但是它不能從檔案中讀取資料啊。

➤    那麼我現在想從檔案中讀入數字,怎麼破?那就套一層:


➤    我不但要從檔案中讀入數字,我還要在讀取過程中利用緩衝區快取資料,怎麼破?那就繼續套:


➤    上面的一層套一層的方式,其實是Java經典的設計模式:裝飾者模式的應用:

 

 

原文連結:

http://mp.weixin.qq.com/s?__biz=MzIyNzUzNjQ3MA==&mid=2247483849&idx=1&sn=656bf330b2851fa301efcff257a1222f&scene=21#wechat_redirect

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.