将字节数组转换为字符串,然后再将其返回到字节数组

时间:2012-03-04 19:04:24

标签: java

我是Java的初学者,我需要转换为字符串的字节数组 之后,我想将其从字符串更改为字节数组 我尝试了下面的代码,但它没有用,因为第2行的返回值与原始数组不匹配:

byte[] comData = byteArray;
String value = new String(comData);
byte[] comData2 = value.getBytes();
// comData2 does not equal comData 

3 个答案:

答案 0 :(得分:5)

如果这是任意字节集合,即它不是实际上编码的文本,那么我建议你使用base64。有一个public domain library available可以很容易(或其他各种第三方库)。

示例代码:

byte[] originalData = ...
String base64 = Base64.encode(myByteArray);
byte[] decoded = Base64.decode(base64);

您的原始代码假定数据代表以平台默认编码编码的文本。您几乎总是避免使用平台默认编码 - 如果您 想要使用文本编码,通常最好指定一个,例如

byte[] encodedText = text.getBytes("utf-8");

(当然,如果您解码二进制数据,那么您无法选择编码 - 您需要知道使用哪种编码。)< / p>

答案 1 :(得分:0)

返回的数组与原始数组不匹配有点奇怪。但是,可能存在一些微妙的字符编码问题。尝试为字节指定显式编码,例如:

byte[] comData = byteArray;
String value = new String(comData, "UTF-8");
byte[] comData2 = value.getBytes("UTF-8");

System.out.println(Arrays.equals(comData, comData2) ? "Success" : "Failure");

由于您说自己是Java的初学者,因此值得注意的是,您无法使用==.equals()比较两个数组。两者都测试数组是否是同一个对象,而不是它们是否具有相同的内容。

答案 2 :(得分:0)

试一试:

byte[] comData = byteArray;
String value = new String();
for(byte me : comData)
{
    value += (char)me;
}
byte[] comData2;
{
    List<byte> temp;
    for(int i=0; i<value.size(); i++)//it may be value.length(), I don't remember
    {
        temp.add(byte(value.getChar(i)));
    }
}
comData2 = temp.getArray();
}

您遇到的主要问题是您尝试使用字节值作为构造函数...然后将STRING转换为字节。 您应该使用简单的转换将其转换为char并返回,在这种情况下,它将是相同的0和1。

注意 某些名称可能会有所不同,因为我没有把所有Java API都放在脑子里;)

相关问题