加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么带有UTF-8的新String包含更多字节

发布时间:2020-12-15 04:45:38 所属栏目:Java 来源:网络整理
导读:byte bytes[] = new byte[16];random.nextBytes(bytes);try { return new String(bytes,"UTF-8");} catch (UnsupportedEncodingException e) { log.warn("Hash generation failed",e);} 当我使用给定方法生成String时,并且当我应用string.getBytes().length
byte bytes[] = new byte[16];
random.nextBytes(bytes);
try {
   return new String(bytes,"UTF-8");
} catch (UnsupportedEncodingException e) {
   log.warn("Hash generation failed",e);
}

当我使用给定方法生成String时,并且当我应用string.getBytes().length时,它返回一些其他值. Max为32.为什么16字节数组最终生成另一个大小的字节字符串?

但如果我做string.length()它返回16.

解决方法

这是因为您的字节首先转换为Unicode字符串,它尝试从这些字节创建UTF-8字符序列.如果一个字节不能被视为ASCII字符,也不能被下一个字节捕获以形成合法的unicode字符,则它将替换为“ ”.调用String#getBytes()时,这样的char被转换为3个字节,从而为结果输出增加了2个额外的字节.

如果你很幸运只生成ASCII字符,String#getBytes()将返回16字节数组,否则,结果数组可能会更长.例如,以下代码段:

byte[] b = new byte[16]; 
Arrays.fill(b,(byte) 190);  
b = new String(b,"UTF-8").getBytes();

返回48(!)字节长的数组.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读