天天看點

Java學習裡程-----Java基礎_23 Java IO 流(一)一、IO二、輸入流、輸出流三、位元組流 字元流四、位元組流和字元流的差別五、IO流大家族

(今天又是元氣滿滿的一天,公司大小周上班,不巧的是,今天是小周,so,我現在在辦公室繼續上班,不忙的時候,我給大家更新部落格。)

Java 的 io 可以說是Java中的一個大石頭,很少能有人搬起來,擡走。原因很簡單,這個東西學不好就這樣,一旦涉及到檔案操作,就頭大,我希望大家看完我的這幾篇連載部落格,能夠有所感悟,廢話不多說,開剛!

一、IO

我們先來認識一下IO,什麼是IO

IO,這倆字母需要分看看,I(這是“愛”!不是數字1 也不是L !!!)代表的單詞是input,翻譯過來是輸入,O(這是字母“歐”,不是數字0)代表的單詞是Output,翻譯過來是輸出,這倆字母合起來就是輸入輸出。

知道了什麼是IO,我就可以繼續說Java了,Java中将IO抽象了一下,并且給定義了一個名字,流。

流是一種抽象概念,它代表了資料的無結構化傳遞。按照流的方式進行輸入輸出,資料被當成無結構的位元組序或字元序列。從流中取得資料的操作稱為提取操作,而向流中添加資料的操作稱為插入操作。用來進行輸入輸出操作的流就稱為IO流。換句話說,IO流就是以流的方式進行輸入輸出-------《百度百科-IO流》

大家詳細請看百度百科,這個比較權威。

我自身的了解,流就類似一個通道,資料到了通道口,開始進行轉換,轉換成能進入通道口的樣子,然後順着通道進行流動,然後出來通道的時候,再進行反轉換,轉換回去。

二、輸入流、輸出流

有了流之後,還不行,我們還得劃分,你給我,對于你來說是輸出,對于我來說是輸入。是以人們還給流定義了方向。

當然,上面說的隻是一個比喻,我們實際上可以用計算機來說輸入流輸出流

輸入流:輸入流是相對程式而言的,外部傳入資料給程式需要借助輸入流。就像你從計算機硬碟上讀取檔案,相對于你來說,這是輸入,因為你得到了檔案

輸出流:輸出流是相對程式而言的,程式把資料傳輸到外部需要借助輸出流。這就像你寫了一個word,然後存到硬碟上。這就是輸出。

要好好了解這裡,有點繞,我給大家畫個圖,大家可能更明白。

Java學習裡程-----Java基礎_23 Java IO 流(一)一、IO二、輸入流、輸出流三、位元組流 字元流四、位元組流和字元流的差別五、IO流大家族

好吧,我屬實畫不出來,是以從網上摟了一個圖得了

三、位元組流 字元流

說完流動方向之後,然後就是流動的内容了。

在說這個之前,我們先來說一下位元組和字元這兩個東西

位元組:Byte

字元:Character

一個位元組 等于 8bit(bit是存儲資訊的最小機關)

一個字元 等于 2個位元組 等于 16個bit

這麼看說明 一個字元 要比 一位元組大 兩倍,知道了這個我們繼續看

Java将檔案進行解析,拆分,按照拆分的情況,一個拆到位元組就不往下拆分了,一個拆到字元就也不拆分了。

是以,Java還按照這兩種拆分情況,将流劃分成兩種一個是位元組流,一個是字元流。

以上都為你記憶位元組流和字元流不同,我用另外的一個思想和你說的,但實際情況如下:

原本其實沒有字元流,隻有位元組流,主要是用在處理二進制資料,而它處理是按照位元組來進行處理的。

但是實際上來說,我們一般用到的資料都是文本,這才提出字元流的概念,這個是使用Unicode編碼,位元組流是采用的ASCll編碼。

加粗的一定要記住!!!!

四、位元組流和字元流的差別

差別1:他倆基本機關不一樣,一個大一個小,看上面就知道

差別2:位元組和字元 這倆流處理的對象不同,字元主要是處理文本,位元組是啥都行。

差別3:(我們後面會講)字元流按照字元進行讀取資料,一次讀取兩個位元組,傳回了這兩個位元組所對應的int類型的值(其實這個值就是編碼)。寫入檔案時把這兩個位元組的内容解碼成這個字元在Unicode碼下對應的二進制資料寫入。也就是說,讀取的時候,按照字元形式讀取出來二進制資料,然後,再以二進制寫入。咋進咋出。

位元組流和字元流類似,但是人家是按照一個一個位元組進行讀取,咋讀咋寫。

擴充:你要是用字元流去讀取圖檔,然後再用字元流去存,我和你說,要是能打開存好的圖檔,我吃屎!(原因:人家圖檔是按照位元組去存儲的,你用字元流形式先讀再存,最後能看才有了鬼,讀就讀錯了)

差別4:看圖說話

好吧,沒有圖,我就用嘴說,字元流中用了緩沖,而位元組流并沒有使用緩沖,問題來了,用緩沖好呢,還是不用緩沖好呢?

答案在後幾篇部落格中,自己去翻着看吧。

五、IO流大家族

Java學習裡程-----Java基礎_23 Java IO 流(一)一、IO二、輸入流、輸出流三、位元組流 字元流四、位元組流和字元流的差別五、IO流大家族

是的,你沒有看錯啊,很多。。。

我是一下子記不住那麼多,我隻記住一些常用的,不常用的需要現查

大家可以打開Overview (Java Platform SE 8 ) Java Api 開發文檔,一邊看一邊熟悉,可以自己找個本子,紙張畫一下繼承啊啥的結構。

下一節内容,先來學習一下位元組流!我們先學位元組流,字元流排在位元組流後面說