基本类型转换为字节流
字节流转换回基本类型
注意理解:
0xff &0xff java移位仅支持int或long
>>带符号右移(负数高位补1,正数高位补0),相当于除以2的n次方
>>>无符号右移(高位补0)
<<左移(低位补0),相当于乘以2的次方
/**
* ASCII码 0x00~0x7F
* ISO8859-1/Latin-1西欧标码
* gb2312中文简体 16进制范围0xB0A1~0xF7FE unicode表示范围\u4E00~\u9FA5 \uF900~\uFA2D
* GBK扩充的gb2312 16进制范围0x8140~0xFEFE
* 表示汉字的首1位bit都为1,而ASCII首1位bit为0,所以GBK编码时,判断是否汉字if(bytex<0)
* UTF-16LE小头(低位为0) 中文/英文字符都是占据两个字节 也叫Unicode编码 (JVM就是处理Unicode值的) 举例:'a' 0x6100
* UTF-16BE大头(高位为0) 中文/英文字符都是占据两个字节 也叫Unicode编码 (JVM就是处理Unicode值的) 举例:'a' 0x0061
* UTF-8编码 高8位是111打头的表示随后的三个字节凑在一起才是一个字符 例如中文
* 高8位是110打头的表示随后的两个字节凑在一起才是一个字符 例如脱离ISO8859-1范围的字符
* 高8位的首位是0的表示单字节的字符 例如ASCII范围内的字符
* UTF-32编码 每个字符都是硬性规定占4个字节
*/
/**
* ASCII码 0x00~0x7F
* ISO8859-1/Latin-1西欧标码
* gb2312中文简体 16进制范围0xB0A1~0xF7FE(其中有5个空位是D7FA-D7FE) unicode表示范围\u4E00~\u9FA5 \uF900~\uFA2D
* GBK扩充的gb2312 16进制范围0x8140~0xFEFE
* 由于表示汉字或图形符号的“高位字节”的首个bit都为1,而ASCII首个bit为0,而实现了这两种字符集对ASCII的兼容
* UTF-16LE小头(低位为0) 中文/英文字符都是占据两个字节 也叫Unicode编码 (Java内部机制就是处理Unicode值的) 举例:'a' 0x6100
* UTF-16BE大头(高位为0) 中文/英文字符都是占据两个字节 也叫Unicode编码 (Java内部机制就是处理Unicode值的) 举例:'a' 0x0061
* UTF-8编码 高8位是111打头的表示随后的三个字节凑在一起才是一个字符 例如中文
* 高8位是110打头的表示随后的两个字节凑在一起才是一个字符 例如脱离ISO8859-1范围的字符
* 高8位的首位是0的表示单字节的字符 例如ASCII范围内的字符
* UTF-32编码 每个字符都是硬性规定占4个字节
*/
/**
* Java基本数据类型和byte数组相互转化的工具类
*
* 0xff 16进制表示法(每一个数字代表4bit) 32位在计算机内表示为 00000000 00000000 00000000 11111111 等于十进制的255
*
* << 左移运算符:操作数向左移动N位(低位补0), 相当于操作数乘以2的几次方
* >> "有符号"右移运算符:操作数右移N位, 操作数为正时,高位补0 ; 操作数为正时,高位补1, 相当于操作数除以2的几次方
* >>> "无符号"右移运算符:操作数右移N位(高位补0)
*
* 对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int(因为java的移位操作仅支持int位移 或者 long位移)
*
* 所以由此延申出的 byte的字节移位时,为什么要&0xff呢?其作用就是仅关心当前8bit这一字节,其它bit位都置为零,保持二进制补码的一致性;
*
* 举例:* 最高 高 稍高 最低
255 0xff 00000000 00000000 00000000 11111111
-1 (byte)0xff 11111111 11111111 111