1. "中".getBytes()返回什么?
A:和源文件的编码有关,gbk的话返回两个字节的编码:[-42, -48],utf-8的话,返回三个字节的编码:[-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('中')到一个文件中,到底写入了什么?写入了几个字节?
A:FileOutputStream.write()始终只写一个字节,'中'是一个字符,编码为20013,其二进制为:
System.out.println((int) '中'); // 20013
System.out.println(Integer.toBinaryString('中')); // 100111000101101
write()方法将int类型转化为byte类型,只取后面8位,刚好为48. (0x2D)
网友评论