java字节流读取utf-16文件时,出现-2、-1(UTF-16BE、LE分析)

在通过字节流读取utf-16的文件时,我发现得到的字节数组,最前面的两个字节总是-2 -1,于是就查了下资料,总结如下。

UTF-16有如下几种情形(utf-16中一个代码单元由两个字节组成):

  • UTF-16BE,其后缀是 BE 即 big-endian,代表大端 ,就是将代码单元的编码从低位,也就是后一个字节开始赋值。
  • UTF-16LE,其后缀是 LE 即 little-endian,代表小端,就是将代码单元的编码从高位,也就是前一个字节开始赋值。
  • UTF-16,没有指定后缀,即不知道其是大小端,所以字节流开始的两个字节会表示大小端。即0XFE 0XFF表示大端,0XFF 0XFE表示小端。

例如,UTF-16BE下,'A’的编码位0x00 0x41;UTF-16LE下,编码为0x41 0x00。
注意代码单元的码点值是不变的,UTF-BE从后位赋值,此时会从左往右读,UTF-LE从前位赋值,代此时会从右往左读。

0XFF,也就是11111111,此时转为byte值,二进制的赋值是以补码的形式的,此时原码为10000001,也就是-1,同理可得0XFE为-2

所以-2 -1代表你是以UTF-16 BE的形式读取文件的,-1 -2代表UTF-16 LE的形式,如果你在读取时指定了BE或者LE,前面就不出现这两个字节了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值