1.編碼與解碼
編碼:字元通過編碼字符集轉為二進位制
解碼:二進位制通過解碼字符集轉為字元
2.出現亂碼的兩種情況
第一,當解碼與編碼的字元不統一時,就會出現亂碼
第二,缺少位元組數,長度丟失,也會出現亂碼
/**
* 解碼與編碼字符集統一 否則亂碼
*/
// 解碼 byte-->char
string str = "中國";
// 編碼 char-->byte
byte data = str.getbytes();
// 編碼與解碼字符集統一為gbk
system.out.println(new string(data));
當解碼與編碼的字符集統一時,不會出現亂碼
輸出正常為 中國
//修改data編碼為「utf-8」
data = str.getbytes("utf-8");
system.out.println(new string(data));
當改變編碼字符集時,就會出現亂碼
輸出結果為:涓浗
byte data2 = "中國".getbytes("utf-8");
str = new string(data2, "utf-8");
system.out.println(str);
可以採用確定編碼解碼的字符集避免亂碼出現,如上都設定為「utf-8」
輸出結果正常 中國
/**
* 位元組數不完整,出現亂碼
*/string str2 = "中國";
byte data3 = str.getbytes();
system.out.println(new string(data, 0, 3));
因為乙個漢字佔兩個位元組,這裡需要4個位元組,而byte陣列長度為3 ,所以出現亂碼
輸出結果為 涓?
3.用轉換流解決檔案copy中亂碼問題
轉換流 位元組流轉為字元流
輸出流 :outputstreamwriter 編碼過程
輸入流 :inputstreamreader 解碼過程
使用轉換流的初衷是為了控制解碼字符集,而只有節點流按byte讀取,才可以設定字符集
所以用轉換流將位元組流轉換為字元流,從下面**可以看出建立這樣乙個物件是比較複雜的
1)file物件
2)fileinputstream物件 ,節點流
3)inputstreamreader物件,轉換流,同時設定字符集
4)bufferedreader物件,字元緩衝流
bufferedwriter思路一致
public class demo07
br.close();
bw.close();
}}
拷貝結果正確無亂碼
檔案讀寫網路IO簡單了解,同步IO和非同步IO
在linux中,對檔案的讀寫其實就是io。與io有關的名詞 同步,非同步,阻塞,非阻塞,甚至是同步阻塞,同步非阻塞,非同步阻塞,非同步非阻塞。別急,下面有舉例 io分為兩大種,同步和非同步 同步io 阻塞io 非阻塞io io多路復用 包括select,poll,epoll三種 訊號驅動io 非同步...
java基礎十 IO字元流Writer
一 writer 用於寫入字元流的抽象類。子類必須實現的唯一方法是write char int,int flush 和close 然而,大多數子類將覆蓋這裡定義的一些方法,以便提供更高的效率,附加的功能或兩者。常用函式 已知子類 1.bufferedwriter 將文字寫入字元輸出流,緩衝字元,以提...
機器學習了解
機器學習的核心是 使用演算法解析資料,從中學習,然後對世界上的某件事情做出決定或 這意味著,與其顯式地編寫程式來執行某些任務,不如教計算機如何開發乙個演算法來完成任務。有三種主要型別的機器學習 監督學習 非監督學習和強化學習,所有這些都有其特定的優點和缺點。監督學習涉及一組標記資料。計算機可以使用特...