Java 位元組流和字元流(輸入流和輸出流)

2021-09-03 00:07:10 字數 2258 閱讀 7104

什麼是位元組流?

位元組流--傳輸過程中,傳輸資料的最基本單位是位元組的流。

什麼是字元流?

字元流--傳輸過程中,傳輸資料的最基本單位是字元的流。

字元編碼方式不同,有時候乙個字元使用的位元組數也不一樣,比如ascll方式編碼的字元,佔乙個位元組;而utf-8方式編碼的字元,乙個英文本元需要乙個位元組,乙個中文需要三個位元組。

位元組資料是二進位制形式的,要轉成我們能識別的正常字元,需要選擇正確的編碼方式。我們生活中遇到的亂碼問題就是位元組資料沒有選擇正確的編碼方式來顯示成字元。

從本質上來講,寫資料(即輸出)的時候,位元組也好,字元也好,本質上都是沒有識別符號的,需要去指定編碼方式。

但讀資料的時候,如果我們需要去「看資料」,那麼位元組流的資料需要指定字元編碼方式,這樣我們才能看到我們能識別的字元;而字元流,因為已經選擇好了字元編碼方式,通常不需要再改了(除非定義的字元編碼方式與資料原有的編碼方式不一致!)

在傳輸方面上,由於計算機的傳輸本質都是位元組,而乙個字元由多個位元組組成,轉成位元組之前先要去查表轉成位元組,所以傳輸時有時候會使用緩衝區。

常用的位元組輸入流主要有:

fileinputstream主要用來操作檔案輸入流,它除了可以使用基類定義的函式外,它還實現了基類的read()函式(無參的):

bufferedinputstream帶有緩衝的意思,普通的讀是從硬碟裡面讀,而帶有緩衝區之後,bufferedinputstream已經提前將資料封裝到記憶體中,記憶體中運算元據要快,所以它的效率要要非緩衝的要高。它除了可以使用基類定義的函式外,它還實現了基類的read()函式(無參的):

常用的位元組輸出流主要有:

fileoutputstream是用於寫檔案的輸出流,它除了可以使用基類定義的函式外,還實現了outputstream的抽象函式write(int b):

bufferedoutputstream像上面那個bufferedinputstream一樣,都可以提高效率。它除了可以使用基類定義的函式外,它還實現了outputstream的抽象函式write(int b):

常見的字元輸入流有:

inputstreamreader 可以把inputstream中的位元組資料流根據字元編碼方式轉成字元資料流。它除了可以使用基類定義的函式,它自己還實現了以下函式:

filereader 可以把fileinputstream中的位元組資料轉成根據字元編碼方式轉成字元資料流。

bufferedreader可以把字元輸入流進行封裝,將資料進行緩衝,提高讀取效率。它除了可以使用基類定義的函式,它自己還實現了以下函式:

常見的字元輸出流有:

outputstreamwriter可以使我們直接往流中寫字串資料,它裡面會幫我們根據字元編碼方式來把字元資料轉成位元組資料再寫給輸出流,它相當於乙個中介\橋梁。

filewriter與outputstreamwriter功能類似,我們可以直接往流中寫字串資料,filewriter內部會根據字元編碼方式來把字元資料轉成位元組資料再寫給輸出流。

bufferedwriter比filewriter還高階一點,它利用了緩衝區來提高寫的效率。它還多出了乙個函式:

Java 位元組流,字元流,輸入流和輸出流概念介紹

按照資料型別 字元流和位元組流 按照資料流向 輸入流和輸出流 字元流的由來 因為資料編碼的不同,而有了對字元進行高效操作的流物件。本質其實就是基於位元組流讀取時,去查了指定的碼表。位元組流和字元流的區別 讀寫單位不同,位元組流以位元組 8bit 為單位,字元流以字元為單位,根據碼表對映字元,一次可能...

字元流和位元組流

字元流和位元組流及其相關流的繼承關係 常用的方法 1.close 關閉流並釋放與之相關聯的任何系統資源 2.int read 讀取乙個字元並返回,沒有讀到返回 1 3.int read char cbuf 將字元讀入陣列,並返回讀取字元的個數,沒有讀到返回 1 4.int read char cbu...

字元流和位元組流

字元流和位元組流 位元組流兩個基類 inputstream outputstream 字元流兩個基類 reader writer 先學習一下字元流特點。既然io流是用於運算元據的。那麼資料的最常見體現形式是 檔案。那麼先以操作檔案為主來顯示。需求 在硬碟上,建立乙個檔案並寫入一些文字資料。找到乙個專...