毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> java技术 >> 正文

byte[]转String再转会byte[]问题

更新时间:2013-8-19:  来源:毕业论文

byte[]转String再转会byte[]问题

//正确的结果 String strOriginal = "csdn xxxx"; byte[] in = strOriginal.getBytes(); byte[] out= myUtils.encode(in); byte[] deout = myUtils.decode(out); String strDecode = new String(deout); Log.e(TAG, strDecode);   //错误的结果 String strOriginal = "csdn xxxx"; byte[] in = strOriginal.getBytes(); byte[] out= myUtils.encode(in); String strEncode = new String(out); //字节数组转换成String后格式好像变了 byte[] deout = myUtils.decode(strEncode.getBytes()); String strDecode = new String(deout); Log.e(TAG, strDecode);

----------
不知道字节数组--->String--->字节数组,过程中都做了什么事情导致结果不一致

加密解密问题。。。
最好中间不要转成string,像new String(xxx)这种操作很容易出问题
上面的new String(out)其实就等于new String(out, utf8)这里红色的是eclipse的默认编码,我的是utf8。
你把byte数组加密后得到的新数组就不满足utf8的编码规则了,再拿来new String(),方法内就会对编码强行调整,整出一堆乱七八糟的东西。
你可以把out和strEncode.getBytes()两个数组输出对比一下就清楚了,我就懒得试

在你new String之前字符数组是经过你编码的,但是当你new String会采用平台默认的字符集解码,接着你在调用.getBytes()又用平台默认的字符集编码。。所以在你decode时,已经不是你之前的编码了,变成了平台默认编码

解决方案就是用Base64编码一下

我觉得也可以吧加密出来的byte[]转成数字字符串
比如byte[] b = {97,98,99};转成String str = "979899"
解密先把"979899" 转成byte[] b = {97,98,99}再解密。

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。