Java編程那些事兒84——IO簡介

來源:互聯網
上載者:User

Java編程那些事兒84——IO簡介

陳躍峰

出自:http://blog.csdn.net/mailbomb

第十一章 I/O處理

         I/O(Input/Output)是輸入和輸出的簡稱,在Java語言中所有和輸入輸出有關的都屬於IO處理技術,例如包含檔案的讀寫和網路資料的發送等。

         其實整個電腦實現功能時最主要的就是IO,使用者使用滑鼠、鍵盤等輸入裝置向程式輸入資料,程式進行一定的邏輯處理,然後再將處理結果以一定的形式顯示到顯示器等輸出裝置上。

         I/O處理技術是Java語言中實現檔案操作、記憶體操作、控制台輸入以及網路編程的基礎,但是由於I/O技術本身的設計原因,也使得I/O處理技術的難度比較大,需要花費比較大的精力進行學習。

11.1 I/O簡介

         IO是輸入和輸出的簡稱,在實際的使用時,輸入和輸出是有方向的。就像現實中兩個人之間借錢一樣,例如A借錢給B,相對於A來說是借出,而相對於B來說則是借入。所以在程式中提到輸入和輸出時,也需要區分清楚是相對的內容。

         在程式中,輸入和輸出都是相對於當前程式而言的,例如從硬碟上讀取一個設定檔的內容到程式中,則相當於將檔案的內容輸入到程式內部,因此輸入和“讀”對應,而將程式中的內容儲存到硬碟上,則相當於將檔案的內容輸出到程式外部,因此輸出和“寫”對應。熟悉輸入和輸出的對應關係,將有助於後續內容的學習。

         在Java語言中,輸入和輸出的概念要比其它語言的輸入和輸出的概念涵蓋的內容廣泛得多,不僅包含檔案的讀寫,也包含網路資料的發送,甚至記憶體資料的讀寫以及控制台資料的接收等都由IO來完成。

         為了使輸入和輸出的結構保持統一,從而方便程式員使用IO相關的類,在Java語言的IO類設計中引入了一個新的概念——Stream(流)。

         由於在進行IO操作時,需要操作的種類很多,例如檔案、記憶體和網路連接等,這些都被稱作資料來源(data source),對於不同的資料來源處理的方式是不一樣的,如果直接交給程式員進行處理,對於程式員來說則顯得比較複雜。

         所以在所有的IO類設計時,在讀資料時,JDK API將資料來源的資料轉換為一種固定的資料序列,在寫資料時,將需要寫的資料以一定的格式寫入到資料序列,由JDK API完成將資料序列中的資料寫入到對應的資料來源中。這樣由系統完成複雜的資料轉換以及不同資料來源之間的不同的變換,從而簡化程式員的編碼。

         IO的這種設計就和城市中的供水和排水系統設計是一樣的,在供水的時候,水源有江河水、湖水和地下水等不同類型,由自來水公司完成把水源轉換為對應的水流。而在排水系統設計時,只需要將汙水排入汙水管道即可,至於這些汙水是怎麼被處理的,則不需要關心,這樣也簡化了家庭用水的處理。

         IO設計中這種資料序列被形象的稱作流(Stream)。通過使用流的概念,使程式員面對不同的資料來源時只需要建立不同的流即可,而底層流實現的複雜性則由系統完成,從而使程式員不必深入的瞭解每種資料來源的讀寫方式,從而降低了IO編程的複雜度。

         在整個IO處理中,讀資料的過程分為兩個步驟:1、將資料來源的內容轉換為流結構,該步驟由JDK API完成,程式員只需要選擇合適的流類型即可。2、從流中讀取資料,該步驟由程式員完成,流中資料的順序和資料來源中資料的儲存順序保持一致。

         寫資料的過程也分為兩個步驟:1、為串連指定的資料來源而建立的專門的流結構,該步驟由JDK API完成,程式員只需要選擇合適的流類型即可。2、將資料以一定的格式寫入到流中,該步驟由程式員完成,寫入流中的資料的順序就是資料在資料來源中的儲存順序。最後,當資料寫入流中以後,可以通過一定的方式把流中的資料寫入資料來源,或者當流被關閉時,系統會自動將流中的資料寫入資料來源中。

         這樣,在整個IO類設計時,將最複雜的和資料來源操作的部分由JDK API進行完成,而程式員進行編程時,只需要選擇合適的流類型,然後進行讀寫即可。

         和現實的結構一樣,IO中的流也是有方向的,用於讀的流被稱作輸入資料流(Input Stream),用於寫的流被稱作輸出資料流(Output Stream)。則進行讀寫的時候需要選擇合適的流對象進行操作。

         流結構的如下所示:

                  

                                    

 

                                    

讀資料流

 

 

 


寫資料流

         而由於Java語言使用物件導向技術,所以在實現時,每個流類型都使用專門的類進行代表,而把讀或寫該類型資料來源的邏輯封裝在類的內部,在程式員實際使用時建立對應的對象就完成了流的構造,後續的IO操作則只需要讀或寫流對象內部的資料即可。這樣IO操作對於Java程式員來說,就顯得比較簡單,而且比較容易操作了。

        

相關文章

聯繫我們

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