Java 字节数组和字符串之间的转换

Java 字节数组和字符串之间的转换,java,Java,我有一个2D字节数组,如下所示: Byte [][] headerparts=new Byte[n+1][24]; for(i=0;i<n;i++){ finalshares[i]=headerparts[i].toString(); } for(i=0;i<n;i++){ System.out.println(finalshares[i].getBytes()); } 现在我还有一个字符串数组: String[] finalshares=new String[

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

Byte [][] headerparts=new Byte[n+1][24];
for(i=0;i<n;i++){
    finalshares[i]=headerparts[i].toString();
}
for(i=0;i<n;i++){
    System.out.println(finalshares[i].getBytes());
}
现在我还有一个字符串数组:

String[] finalshares=new String[n];
我需要将字节数组转换为字符串数组。所以我做了如下操作:

Byte [][] headerparts=new Byte[n+1][24];
for(i=0;i<n;i++){
    finalshares[i]=headerparts[i].toString();
}
for(i=0;i<n;i++){
    System.out.println(finalshares[i].getBytes());
}
那么,为什么将字符串[]转换为字节后的最终答案与此不同呢

最后的答案是:

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

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

字节数组到字符串数组:

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

对于(i=0;i您可以通过将字节数组作为参数传递给字符串构造函数,将字节数组转换为字符串对象。请尝试这样做(为此,您需要使用byte[],而不是它的包装类byte[])

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


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

headerparts是一个2d bytearray。那么finalshares[i]=新字符串(headerparts[i])是否正确?它给出的错误有点像这样:没有为String(java.lang.byte[])构造函数java.lang String.String找到合适的构造函数(int,int,char[])不适用(实际参数和形式参数列表长度不同)构造函数java.lang.String.String(java.lang.StringBuilder)不适用(实际参数java.lang.Byte[]无法通过方法调用转换转换为java.lang.StringBuilder)构造函数java.lang.String.String(java.lang.StringBuffer)不适用将字节[]更改为字节[]为什么初始最终共享2d数组和将字符串数组转换为字节后的最终数组都不同?它们不应该相同吗?是的,我将其转换为字节[][]。可以。我的第二个问题呢?你得到了这个-getBytes()方法返回以字节为单位的字符串对象。您看到它与原始对象不同的原因是您错误地使用了toString()方法。
new String(byte[] bytes, Charset charset)