1.难得看到有这么喜欢专研的,先给个赞(时间有限,我简单解释下)
2.JAVA使用UTF-16的编码(Unicode编码的一种解决方案),该编码方式使用定长,即16位来标识一个"字符"注意该处的字符不是基本数据类型Character),也就是两个字节,所以你看到char类型以及byte类型的大小都是两个字节(因为两个字节所表示的范围已经足够囊括这些,或者说可以囊括常用的).
3.但是使用8个bit为就可以标识所有英语字符以及英语标点,使用16bit来标识就显得浪费时间了,所以如果是ASCII字符,就会8bit来存储(该处设计到可变长的编码方式,如有疑问,请自行百度),汉字使用8bit是不存用来对应处所有汉字的(或者说常用汉字),所以他采用16bit来标识
4.总体来讲,可变长编码方案可以有效利用空间.
5.那么问题来了,计算机如何识别到底该用多少bit来存储该字符那???在可变长编码方案中,每byte种会被插入标志信息,计算机在读取该字符是,首先它会读取该标志位,如果该标志位代表英文字符,它就使用8bit来存储,如果代表汉字,就使用16bit存储.
6.通常字符集会是ASCII编码的超集,因为英语的使用范围太广泛,也就是说,计算机在存储过程中对英语字符都是使用8bit进行存储
7.验证方式:将byte[]打印出来看看即可
|