天天看點

關于位元組流讀取文本資料

在使用位元組流讀取文本内容後,将讀取内容打出到控制台,發現亂碼。

但是将改文本檔案内容複制到另一個文本檔案中時,内容正常顯示漢字。

FileInputStream fis =new FileInputStream("C:\\Users\\PCTC\\Desktop\\file\\map.txt");
 FileOutputStream fos = new FileOutputStream("C:\\Users\\PCTC\\Desktop\\file\\map1.txt");
 	int by ;
            while ((by = fis.read()) != -1){
                System.out.print((char)by);
                fos.write(by);
            }
            fis.close();
            fos.close();
           

因為複制檔案時是讀取一個位元組寫入一個位元組。然後最終根據這些位元組流拼成漢字。

一個漢字存儲:
	如果是GBK編碼,占用2個位元組
	如果是UTF - 8編碼,占用3個位元組
           
public static void main(String[] args)  throws UnsupportedEncodingException {

//        String a = "abc";
//        byte[] bys =a.getBytes();   //[97, 98, 99]
        String s = "中國";
//        byte[] bys = s.getBytes();  [-28, -72, -83, -27, -101, -67]
//        byte[] bys = s.getBytes("Utf-8");   [-28, -72, -83, -27, -101, -67]
        byte[] bys = s.getBytes("GBK");//[-42, -48, -71, -6]
        System.out.println(Arrays.toString(bys));
    }
           

**

采用何種規則編碼,就要采用對應規則解碼,否則就會出現亂碼

**

String s = "中國";
		
        byte[] bys = s.getBytes("Utf-8"); 
        
        System.out.println(Arrays.toString(bys));
        
        String sa = new String(bys,"Utf-8");
        
        System.out.println(sa);
           

輸入結果為

[-28, -72, -83, -27, -101, -67]

中國