直接讀字節,而數據比較長,沒有一次讀完的時候,很可能剛好讀到一個漢字的前一個字節,這樣,這個中文就成了亂碼,后面的數據因為沒有字節對齊,也都成了亂碼。
InputStream,字面意思字節輸入點,也就是說以字節為單位進行流式數據的讀取。它是所有字節輸入流的基類,同時是一個抽象類,如果要使用需要使用其子類。常見的有FileInputStream,從文件中讀取字節輸入流;BufferedInputStream是帶緩沖區的輸入流,它繼承于FilterInputStream。默認緩沖區大小是8M,能夠減少訪問磁盤的次數,提高文件讀取性能。不管是哪種字節輸入流,讀取的是字節byte,GBK每個漢字兩個字節,UTF-8每個漢字三個字節而當中英文混合的時候,有的字符占一個字節,有的字符占兩個字節。
所以如果直接讀字節,而數據比較長,沒有一次讀完的時候,很可能剛好讀到一個漢字的前一個字節,這樣,這個中文就成了亂碼,后面的數據因為沒有字節對齊,也都成了亂碼。
解決辦法,首先在讀取的時如果涉及漢字我們要設置字符集編碼,采用字符流進行讀取比如InputStreamReader,FileReader,BufferedReader 。
回答所涉及的環境:聯想天逸510S、Windows 10。
InputStream,字面意思字節輸入點,也就是說以字節為單位進行流式數據的讀取。它是所有字節輸入流的基類,同時是一個抽象類,如果要使用需要使用其子類。常見的有FileInputStream,從文件中讀取字節輸入流;BufferedInputStream是帶緩沖區的輸入流,它繼承于FilterInputStream。默認緩沖區大小是8M,能夠減少訪問磁盤的次數,提高文件讀取性能。不管是哪種字節輸入流,讀取的是字節byte,GBK每個漢字兩個字節,UTF-8每個漢字三個字節而當中英文混合的時候,有的字符占一個字節,有的字符占兩個字節。
所以如果直接讀字節,而數據比較長,沒有一次讀完的時候,很可能剛好讀到一個漢字的前一個字節,這樣,這個中文就成了亂碼,后面的數據因為沒有字節對齊,也都成了亂碼。
解決辦法,首先在讀取的時如果涉及漢字我們要設置字符集編碼,采用字符流進行讀取比如InputStreamReader,FileReader,BufferedReader 。
回答所涉及的環境:聯想天逸510S、Windows 10。