您好,登錄后才能下訂單哦!
IO概念
IO可以簡單的理解成INPUT和OUT,代表輸入輸出的意思。輸入就是讀,輸出就是寫。
IO可以讀寫硬盤、光盤、內存、鍵盤、網絡等資源上的數據。
流
IO中的流就相當于現實生活中的水流一樣,一打開自來水的龍頭開關,水就從一頭流向另一頭。可以理解成每個按順序排列的水滴就是需要傳輸的字節。把有序數據理解成流,流負責傳輸數據,以便于輸入輸出。數據是流動的,是有方向的流動。
數據的內部表示便于程序進行數據處理。典型的內部表示有:整型數的二進制表示、浮點數的IEEE表示、字符的ASCII或Unicode編碼表示。數據的外部表示則根據不同的外部設備的需要,有具體不同的表現形式。如果外部數據表示是可讀的字符序列,則稱為文本IO,否則為二進制IO。標準IO流的主要目的是支持文本IO,不直接支持二進制IO。
雖然IO流是以流的方式進行數據傳遞,但這并不表明傳遞的數據不能有任何結構,而是指IO流的概念是以流的方式進行輸入輸出,所傳遞數據的內部結構隱藏在對流數據的解釋中。
流的分類
按數據的走向可以分為:輸入流,輸出流。
按數據的單位可以分為:字節流、字符流。
按裝飾模式可以分為:節點流(底層)、處理流(上層)。
輸入流與輸出流
輸入流:只能從中讀取數據,而不能向其寫入數據。一般用于將數據從網絡、硬盤讀取到內存中。
輸出流:只能向其寫入數據,而不能從中讀取數據。一般用于將數據從內存中寫入到網絡、硬盤。
輸入流主要由InputStream和Reader作為父類。
輸出流主要由OutputStream和Writer作為父類。
他們都是抽象的,因此無法直接創建對象。
字節流與字符流
字節流與字符流的用法幾乎完全一樣,區別在于所操作的單位不同,字節流操作8位的字節,
而字符流操作16位的字符。
字節流主要由InputStream和OutputStream作為父類。
字符流主要由Reader和Writer作為父類。
節點流與處理流
節點流(上層):
向特定的節點寫入&讀取數據的流。程序連接到實際的數據源,和實際的輸入輸出節點連接。
處理流(底層):
對一個已存在的流進行連接或封裝,通過封裝后的流來實現數據讀寫功能。
使用處理流進行輸入輸出時,程序不會和實際的輸入輸出節點連接,對底層的處理流做了一層封裝。
程序可以采用相同的輸入輸出代碼來訪問不同的數據源。(涉及到裝飾器模式)
處理流使得java程序無需理會輸入輸出的節點是磁盤、網絡還是其他,
只要將這些節點流包裝成處理流,
就可以使用相同的輸入輸出代碼來讀寫不同的輸入輸出設備的數據。
節點流用于和底層的物理存儲節點直接關聯,不同的物理節點獲取節點流的方式可能存在差異。
程序可以把不同的物理節點流包裝成統一的處理流,
允許程序使用統一的輸入輸出代碼來讀寫不同的物理存儲節點資源。
常用的輸入輸出流體系
io流按功能分成許多類,每個功能又提供字節流和字符流,
字節流與字符流又分別提供了輸入流與輸出流。如果輸入輸出的是文本內容可以使用字符流,如果輸入輸出的是二進制內容,可以使用字節流。
字節流
字節流是IO最原始的方式,因為計算機處理數據總是以一個byte為基本單位的,字節流就是每次讀取的單位為byte。字節流是所有流的基礎,也是其他高級流的前提。字節流可以處理所有類型的數據,包括:音樂、圖片、文字、視頻、各種文件等等。多數以"Stream"結尾的類都是字節流。
字符流
字符流只能處理文本,讀寫的單位是字符。多數以"Writer"與"Reader"結尾的類都是字節流。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。