Java中的字元是Unicode編碼,是雙位元組的,即一個字元等於兩個位元組。
字元流的好處是可以更加便捷的操作文字檔。
(抽象流)字元輸出資料流:Writer 字元輸入資料流:Reader
package day20.charstream;import java.io.File;import java.io.FileReader;import java.io.IOException;import java.io.Reader;public class Demo1 {public static void main(String[] args) {File file = new File("d:/Test/hi.txt");read(file);//讀出的資料中文亂碼}/** * 讀出指定的檔案並在螢幕列印出來,並使用自動關閉資源 * @param file */public static void read(File file){try (Reader r = new FileReader(file);){char[] buff = new char[1024];int len = 0;while((len = r.read(buff))!=-1){String data = new String(buff,0,len);System.out.println(data);}} catch(IOException e) {e.printStackTrace();}}}
位元組流和字元流的區別:
1)在使用字元流操作的時候會使用到緩衝區,而位元組流操作的時候是不會使用到緩衝區的
2)在輸出的時候,OutputStream類即使最後沒有關閉內容也可以輸出。但是如果是Writer的話,則如果不關閉,最後一條內容是無法輸出的,因為所有的內容都是儲存在了緩衝區之中,每當調用了close()方法就意味著清空緩衝區了。那麼可以證明字元流確實使用了緩衝區:
位元組流:程式 → 檔案
字元流:程式 → 緩衝區 → 檔案
3)兩者相比,肯定使用位元組流更加的方便,而且在程式中像圖片、MP3等都是採用位元組的方式的儲存,那麼肯定位元組流會比字元流使用的更廣泛。
但是需要說明的是,如果要是想操作中文的話,字元流肯定是最好使的。