Android字节数组到字符串到字节数组

时间:2012-05-08 06:41:43

标签: android string bytearray

我需要的只是将byte []转换为String。然后用该字符串做一些事情并转换回byte []数组。但在这个测试中,我只是将byte []转换为字符串并转换回byte [],结果不同。

使用以下命令将byte []转换为字符串:

byte[] byteEntity = EntityUtils.toByteArray(entity);
String s = new String(byteEntity,"UTF-8");

然后我尝试了:

byte[] byteTest = s.getBytes("UTF-8");

然后我抱怨道:

if (byteEntity.equals(byteTest) Log.i("test","equal");
else Log.i("test","diff");

所以结果不同。

我在stackoverflow中搜索了这个,但它与我的情况不符。关键是我的数据是.png图片所以转换的字符串是不可读的。提前谢谢。

3 个答案:

答案 0 :(得分:1)

解决

使用类似的东西。

byte[] mByteEntity = EntityUtils.toByteArray(entity);
byte[] mByteDecrypted = clip_xor(mByteEntity,"your_key".getBytes());
baos.write(mByteDecrypted);
InputStream in = new ByteArrayInputStream(baos.toByteArray());

这是函数clip_xor

protected byte[] clip_xor(byte[] data, byte[] key) {
    int num_key = key.length;
    int num_data = data.length;

    try {
        if (num_key > 0) {
            for (int i = 0, j = 0; i < num_data; i++, j = (j + 1)
                    % num_key) {
                data[i] ^= key[j];
            }
        }
    } catch (Exception ex) {
        Log.i("error", ex.toString());
    }
    return data;
}

希望这对面临同样问题的人有用。谢谢大家帮助我解决这个问题。

特别感谢P'krit_s

答案 1 :(得分:0)

原始数组实际上是对象(这就是为什么它们具有.equals方法)但是它们没有实现比较所需的相等性(hashCode和equals)。您也不能使用==因为根据文档,.getBytes将返回一个新的实例byte []。您应该使用Arrays.equals(byteEntity,byteTest)来测试相等性。

答案 2 :(得分:0)

查看答案here

在那种情况下,我的目标是在字节流中转换png图像以在嵌入式浏览器中显示它(这是浏览器没有直接显示png的特殊情况)。

您可以使用该解决方案的逻辑将png转换为byte,然后转换为String。

然后反转操作顺序以返回原始文件。