Java I/O— 梳理各種“流”

來源:互聯網
上載者:User

標籤:java-io   裝飾者模式   

背景

  Java的核心庫java.io提供了全面的IO介面。包括:檔案讀寫、標準裝置輸出等。Java中IO是以為基礎進行輸入輸出的,所有資料被序列化寫入輸出資料流,或者從輸入資料流讀入。 —— 百度百科
  Java.io中有很多類,我們如何清楚地知道什麼時候該用什麼類呢?

目標

  本文的目標是梳理java.io中各個類的關係,瞭解各個類的應用情境。

概念

  資料來源資料流目的地。在看關於java io的相關代碼時,每次都要問問自己此時這三者各指的是誰。而本文主要是說資料流的。

歸類

  按不同分類方法,將各種“流”歸入不同的類。。

  雖然從不同的角度可以將各種各樣的“流”分開,但是它們並不是各自獨立的,會有交叉,就像FileInputStream是輸入資料流,同時也是位元組流或是節點流。
  區分輸入資料流和輸出資料流,看類的名稱中有In,還是Out;或是有R還是W。區分位元組流和字元流,基本上看結尾是Stream還是Reader、Writer。那如何區分節點流和處理流,這裡就要說說設計模式中的裝飾者模式了。
  剛才說了三種分類有交叉,位元組流中既有節點流,又有處理流。字元流也是一樣。這裡咱們就以位元組流為例,來用裝飾者模式說明節點流和處理流的關係。
  學習這部分內容時,我們把資料流比作一個管子,如果說節點流是直接連接在資料來源或目的地上的管子,那麼處理流就是套在管子上的管子,如所示。

 

裝飾者模式與Java IO

  裝飾者模式就是動態地將責任附加到對象上,擴充項物件的行為。我們可以根據需要在節點流上,用處理流進行一層層的裝飾。這樣很靈活,通過組合的方式避免了“類爆炸”。但是,各種各樣的“流”類,也造成了我們使用API的困難。不過明白了裝飾者模式,你就可以根據需要任意封裝了,也就不亂了。

常用類用途
節點流 用途
FileInputStream 從檔案讀資料
ByteArrayInputStream 從記憶體中的位元組數組讀資料
處理流 用途 新增行為/備忘
BufferedInputStream 帶緩衝區的處理流,避免每讀一個位元組都要訪問一次硬碟,提高訪問速率,減小對硬碟的傷害 如:readline()
DataInputStream 將位元組直接轉換成各種基本類型(int,double……)進行讀取 如:readdouble()
ObjectInputStream 將位元組直接轉化成對象進行讀取 serializable,transient,externalizable
InputStreamReader 將位元組轉換成字元進行讀取,對於漢字如果按位元組讀取,讀出來後不知道是什麼字 ——
總結

  文章並沒有列舉出java io中所有的輸入輸出資料流,重要的是根據上述的歸納總結能夠舉一反三,融會貫通。具體細節,還要查API文檔。

Java I/O— 梳理各種“流”

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.