【问题标题】:Conversion Between ByteArray and String字节数组和字符串之间的转换
【发布时间】:2014-03-17 03:43:20
【问题描述】:

我有一个像这样的二维字节数组:

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

现在我也有一个字符串数组:

String[] finalshares=new String[n];

我需要将字节数组转换为字符串数组。所以我有点像这样:

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

这是正确的方法吗?

还有如何将此字符串数组转换回二维字节数组。请帮助。

这样的字符串到字节数组是否正确:

for(i=0;i<n;i++){
    System.out.println(finalshares[i].getBytes());
}

编辑:我根据下面提供的答案进行了转换:

问题是最初说我的 2D[][] 字节数组是:

 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

【问题讨论】:

    标签: java


    【解决方案1】:

    使用字节数组代替字节数组

    字节数组转字符串数组:

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

    字符串到字节数组:

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

    【讨论】:

    • headerparts 是一个二维字节数组。这个 finalshares[i]=new String(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) 不适用
    • 把 Byte[] 改成 byte[]
    • 为什么将字符串数组转换为字节后的初始finalshares二维数组和最终数组都不同?它们应该相同吗?
    • 是的,我已经转换为 byte[][]。没关系
    【解决方案2】:

    您可以通过将字节数组作为参数传递给 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() 方法将返回字节数组转换的默认实现。

    【讨论】:

    • 我的第二个问题呢?
    • 你得到了这个 - getBytes() 方法返回一个以字节为单位的 String 对象。你看到它与原来不同的原因是你错误地使用了 toString() 方法。
    猜你喜欢
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 2021-11-11
    相关资源
    最近更新 更多