ByteArray和String之间的转换

时间:2014-03-17 03:43:20

标签: java

我有一个2D字节数组,如下所示:

Byte [][] headerparts=new Byte[n+1][24];

现在我也有一个String数组:

String[] finalshares=new String[n];

我需要将Byte数组转换为字符串数组。所以我确实喜欢这样:

for(i=0;i<n;i++){
    finalshares[i]=headerparts[i].toString();
}

这是正确的方法吗?

此外如何将此String数组转换回2D Byte数组。请帮助。

字符串是否适合Bytearray像这样:

for(i=0;i<n;i++){
    System.out.println(finalshares[i].getBytes());
}
编辑:我根据下面提供的答案进行了转换:

问题是最初我的2D [] [] Byte数组是:

 1 5 3 116 69 75 99 54 0 0 0 106 115 71 69 108 49 122 0 0 0 44 40 
 2 5 3 116 0 0 0 54 105 97 0 106 115 71 0 0 0 122 86 0 0 44 40 
 3 5 0 0 69 75 0 54 0 97 53 106 0 0 69 108 0 122 0 0 0 44 0 
 4 0 3 0 69 0 99 0 105 97 53 0 115 0 69 0 49 0 86 0 0 0 40 
 5 0 0 116 0 75 99 0 105 0 53 0 0 71 0 108 49 0 86 0 0 0 0 

那么为什么将String [] []转换为Bytes后的最终答案与此不一样。?

最终答案是:

 [B@17bd6a1
 [B@147ee05
 [B@15b9e68
 [B@1fcf0ce
 [B@1256ea2

2 个答案:

答案 0 :(得分:2)

使用字节数组而不是字节数组

字节数组到字符串数组:

for(i=0;i<n;i++){
    finalshares[i]=new String(headerparts[i]);
}

Bytearray的字符串:

for(i=0;i<n;i++){
headerparts[i] = finalshares[i].getBytes();

}

答案 1 :(得分:0)

您可以将字节数组作为参数传递给String构造函数,从而将字节数组转换为String对象。尝试这样做(为此你需要使用byte []而不是它的包装类Byte []),

for(i=0;i<n;i++){
    finalshares[i]=new String(headerparts[i]); // Java converts it to a string representation
}

您也可以使用构造函数:

new String(byte[] bytes, Charset charset)

如果您知道传递的字节的性质(无论您使用的是ASCII,UTF-8等)。

您使用的toString()方法将返回字节数组转换的默认实现。