smile908

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

关于String和byte数组之间的转化问题

上次在项目中遇到了这样的一个问题,我从接口取到的rawData数组的长度是8192,

我将这个byte数组用new String(rawwData)的方法将byte数组转化为字符串,作为参数传给另外的一个方法,

在这个方法中,将这个String又转化为了数组,这个时候的数组大小变成了30000多,当然传进来的String大小为8192

所以可以确定是str.getBytes(encoding),这个地方的错误。原因是编码的问题,是因为utf-8可以将一个字节变成了1-4字节,

因为java的默认方法就是utf-8,因此我们为避免出错,应该选用iso-8859-1的编码方式。

接下来,我们来看两个例子:

默认的方式:

public static void main(String[] args) {
byte[] bytes = new byte[] { 50, 0, -1, 28, -24 };
try {
//"ISO-8859-1"
String sendString=new String( bytes );
System.out.println(sendString);
byte[] Mybytes=sendString.getBytes();
for (int i = 0; i <Mybytes.length ; i++) {
System.out.print(Mybytes[i]+" ");
}
} catch (Exception e) {
e.printStackTrace();
}
运行结果:

 

 我们可以看到,原来byte数组里面只有5字节,经过一系列的转化之后,变成了9字节,我们还发现,正数和0没有改变

字节大小改变的只有负数。在这个例子中,byte数组转String以及string转byte数组都是采用的utf-8,默认是编码方式

接下来我们使用iso-8859-1的编码方式进行处理

public static void main(String[] args) {
byte[] bytes = new byte[] { 50, 0, -1, 28, -24 };
try {
//"ISO-8859-1"
String sendString=new String( bytes,"ISO-8859-1");
System.out.println(sendString);
byte[] Mybytes=sendString.getBytes("ISO-8859-1");
for (int i = 0; i <Mybytes.length ; i++) {
System.out.print(Mybytes[i]+" ");
}
} catch (Exception e) {
e.printStackTrace();
}
运行图例:

 

 我们可以看出,我们这样的一系列操作之后,bytes数组的值没有发现改变,我们的目的也实现了。这也是我们在项目

开发中需要注意的问题。

posted on   smile908  阅读(1653)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示