位元組流java
『壹』 關於java流的問題,位元組流與字元流,為什麼要用轉換流,把位元組轉換成字元流,為什麼不直接用字元流
你好,很高興為你解答。
正如你所說Java IO分兩種流 1)位元組流 InputStream OutputStream ;2)字元流 Reader Writer 。
為什麼需要用兩種流,而且要轉換,不直接用字元流。
簡單說來,就是字元流不能處理所有的情況,位元組流也不能處理所有的情況。所以需要兩種轉換。
先說一下二者的區別:
1)字元流處理的單元為2個位元組的Unicode字元,分別操作字元、字元賣肆數組或字元串,
2)而位元組流處理單元為1個位元組, 操作位元組和位元組數組。
位元組流可用於任何類型的對象,包括二進制對象,而字元流只能處理字元或者字元串; 位元組流提供了處理任何類型的IO操作的功能,但它不能直接處理Unicode字元,而友配鎮字元流就可以。
所以字元流是由Java虛擬機將位元組轉化為2個位元組的Unicode字元為單位的字元而成的,所以它對多好粗國語言支持性比較好!
如果是 音頻文件、圖片、歌曲,就用位元組流好點。
如果是關繫到中文(文本)的,用字元流好點。
『貳』 Java字元流和位元組流對文件操作的區別
Java字元流是處理字元(Char)對象用的,位元組流是處理位元組(Byte)對象用的。處理的目標對象不同,處理方法也就不一樣了。
字元流處理的基本單位是字元(Java中的字元是16位的),輸入流以Reader為基礎,輸出流以Writer為基礎;
位元組流的基本單位是位元組(Java中的位元組是8位的),輸入流以
InputStream為基礎,輸出流以
OutputStream為基礎;
字元流在輸入時可以按字元讀取,也可以按行讀取,會去掉回車換行,常用於讀取字元數據;
而位元組流按位元組讀取,不作任何處理,常用於讀取二進制數據。
Java中的字元在內部都是使用Unicode進行表示的,因此,要正確讀取字元數據,需要知道字元的編碼字元集,字元流提供編碼字元集的指定,如果不指定使用系統默認的方式對字元數據進行編碼轉換,這個編碼字元集不正確,會造成讀進來的地字元出現亂碼。
位元組流雖然是讀取二進制數據用的,但也可以讀取字元文件,按位元組進行處理,讀進來之後可以根據編碼字元集進行轉換,也可以變成字元串。