1.?"中".getBytes()返回什么扶欣?
?A:和源文件的編碼有關,gbk的話返回兩個字節(jié)的編碼:[-42, -48]磺箕,utf-8的話卵贱,返回三個字節(jié)的編碼:[-28, -72, -83]驮俗,
代碼:
System.out.println(Arrays.toString("中".getBytes()));? ?
輸出:
源文件為gbk編碼:[-42, -48]
源文件為utf-8編碼:[-28, -72, -83]
[-28, -72, -83]對應的16進制形式如下:
System.out.println(Integer.toHexString(-28));? ? // 輸出ffffffe4
System.out.println(Integer.toHexString(-72));? ? // 輸出ffffffb8
System.out.println(Integer.toHexString(-83));? ? // 輸出ffffffad
對于utf-8編碼的文件懂缕,在vscode里面,使用hexdump插件查看【中】這個字的內容如下:
Offset: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ??
00000000: E4 B8 AD?
2. 使用FileOutputStream.write('中')到一個文件中王凑,到底寫入了什么搪柑?寫入了幾個字節(jié)?
A:FileOutputStream.write()始終只寫一個字節(jié)索烹,'中'是一個字符工碾,編碼為20013,其二進制為:
System.out.println((int) '中'); // 20013
System.out.println(Integer.toBinaryString('中')); // 100111000101101
write()方法將int類型轉化為byte類型百姓,只取后面8位渊额,剛好為48. (0x2D)