Java 字元流
字元編碼表:其實就是生活中字元和計算機二進位制的對應關係表。
1、ascii: 一個位元組中的7位就可以表示。對應的位元組都是正數。0-xxxxxxx
2、iso-8859-1:拉丁碼錶 latin,用了一個位元組用的8位。1-xxxxxxx 負數。
3、GB2312:簡體中文碼錶。包含6000-7000中文和符號。用兩個位元組表示。兩個位元組第一個位元組是負數,第二個位元組可能是正數
GBK:目前最常用的中文碼錶,2萬的中文和符號。用兩個位元組表示,其中的一部分文字,第一個位元組開頭是1,第二位元組開頭是0
GB18030:最新的中文碼錶,目前還沒有正式使用。
4、unicode:國際標準碼錶:無論是什麼文字,都用兩個位元組儲存。
Java中的char型別用的就是這個碼錶。char c = 'a';佔兩個位元組。
Java中的字串是按照系統預設碼錶來解析的。簡體中文版 字串預設的碼錶是GBK。
5、UTF-8:基於unicode,一個位元組就可以儲存資料,不要用兩個位元組儲存,而且這個碼錶更加的標準化,在每一個位元組頭加入了編碼資訊(後期到api中查詢)。
能識別中文的碼錶:GBK、UTF-8;正因為識別中文碼錶不唯一,涉及到了編碼解碼問題。
對於我們開發而言;常見的編碼 GBK UTF-8 ISO-8859-1
文字--->(數字) :編碼。“abc”.getBytes() byte[]
(數字)--->文字 : 解碼。byte[] b={97,98,99} new String(b,0,len)
FileReader,用來讀取字元檔案的便捷類。此類的構造方法假定預設字元編碼和預設位元組緩衝區大小都是適當的
使用FileReader讀取包含中文的檔案
public class CharStreamDemo {
public static void main(String[] args) throws IOException {
//給檔案中寫中文
writeCNText();
//讀取檔案中的中文
readCNText();
}
//讀取中文
public static void readCNText() throws IOException {
FileReader fr = new FileReader("D:\\test\\cn.txt");
int ch = 0;
while((ch = fr.read())!=-1){
//輸出的字元對應的編碼值
System.out.println(ch);
//輸出字元本身
System.out.println((char)ch);
}
}
//寫中文
public static void writeCNText() throws IOException {
FileOutputStream fos = new FileOutputStream("D:\\test\\cn.txt");
fos.write("歡迎你".getBytes());
fos.close();
}
}
FileWrite,用來寫入字元檔案的便捷類。此類的構造方法假定預設字元編碼和預設位元組緩衝區大小都是可接受的。
寫入字元到檔案中,先進行流的重新整理,再進行流的關閉。
public class FileWriterDemo { public static void main(String[] args) throws IOException { //演示FileWriter 用於操作檔案的便捷類。 FileWriter fw = new FileWriter("d:\\text\\fw.txt"); fw.write("你好謝謝再見");//這些文字都要先編碼。都寫入到了流的緩衝區中。 fw.flush(); fw.close(); } }
flish()和close()的區別
flush():將流中的緩衝區緩衝的資料重新整理到目的地中,重新整理後,流還可以繼續使用。
close():關閉資源,但在關閉前會將緩衝區中的資料先重新整理到目的地,否則丟失資料,然後在關閉流。流不可以使用。如果寫入資料多,一定要一邊寫一邊重新整理,最後一次可以不重新整理,由close完成重新整理並關閉。