关于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数组的值没有发现改变,我们的目的也实现了。这也是我们在项目
开发中需要注意的问题。