2

我需要的只是将 byte[] 转换为 String。然后对该字符串执行一些操作并转换回 byte[] 数组。但是在这个测试中,我只是将 byte[] 转换为 string 并转换回 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 图片,因此转换后的字符串不可读。提前致谢。

4

3 回答 3

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

于 2012-05-09T02:35:29.157 回答
0

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

于 2012-05-08T07:30:08.343 回答
0

看看这里的答案。

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

您可以使用该解决方案的逻辑将 png 转换为字节,然后转换为字符串。

然后颠倒操作顺序回到原始文件。

于 2012-05-08T07:33:36.843 回答