我是Java的初学者,我有一个字节数组需要转换成字符串。
然后我想把它再从字符串转换回字节数组。
我尝试了下面的代码,但是它不起作用,因为第2行的返回值与原始数组不匹配:
byte[] comData = byteArray;
String value = new String(comData);
byte[] comData2 = value.getBytes();
// comData2 does not equal comData
我是Java的初学者,我有一个字节数组需要转换成字符串。
然后我想把它再从字符串转换回字节数组。
我尝试了下面的代码,但是它不起作用,因为第2行的返回值与原始数组不匹配:
byte[] comData = byteArray;
String value = new String(comData);
byte[] comData2 = value.getBytes();
// comData2 does not equal comData
byte[] originalData = ...
String base64 = Base64.encode(myByteArray);
byte[] decoded = Base64.decode(base64);
byte[] encodedText = text.getBytes("utf-8");
返回的数组与原始数组不匹配有点奇怪。然而,可能存在一些微妙的字符编码问题。尝试为字节指定一个明确的编码,例如:
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()
来比较两个数组。这两个方法都测试数组是否为同一对象,而不是它们是否具有相同的内容。
尝试这样做:
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();
}