計算機是如何識別什麼時候該把兩個位元組轉換成為一箇中文呢
阿新 • • 發佈:2018-12-21
package cn.itcast_02; import java.io.FileInputStream; import java.io.IOException; /* * 位元組輸入流操作步驟: * A:建立位元組輸入流物件 * B:呼叫read()方法讀取資料,並把資料顯示在控制檯 * C:釋放資源 * * 讀取資料的方式: * A:int read():一次讀取一個位元組 * B:int read(byte[] b):一次讀取一個位元組陣列 */ public class FileInputStreamDemo { public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("FileOutputStreamDemo.java"); int by = 0; // 讀取,賦值,判斷 while ((by = fis.read()) != -1) { System.out.print((char) by); } // 釋放資源 fis.close(); } }
上面的程式碼讀取英文,數字等都沒問題,唯獨中文出現了問題.
原因在於,每次讀取到一個位元組就通過 (char)by 強制轉換成一個字元,而 中文=1個字元=兩個位元組 ,相當於一個中文讀取到一半就被轉換了,所以中文讀取出錯
package cn.itcast_03; import java.util.Arrays; /* * 計算機是如何識別什麼時候該把兩個位元組轉換為一箇中文呢? * 在計算機中中文的儲存分兩個位元組: * 第一個位元組肯定是負數。 * 第二個位元組常見的是負數,可能有正數。但是沒影響。 */ public class StringDemo { public static void main(String[] args) { // String s = "abcde"; // // [97, 98, 99, 100, 101] String s = "我愛你中國"; // [-50, -46, -80, -82, -60, -29, -42, -48, -71, -6] byte[] bys = s.getBytes(); System.out.println(Arrays.toString(bys)); } }