2012-05-08 38 views
2

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

通过使用这个字节[]转换为字符串:

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

然后我试图:

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

然后我complared它:

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

所以结果是不同。

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

+0

您正在使用'Array.equals',它不会做你认为它正在做的事。你有没有尝试转换回'字符串'和比较这些值? –

+0

你能详细说明你为什么这么做吗?具体来说,你用不可读的字符串做什么? 如果您正在尝试执行的操作,图像最好存储为base64编码的字符串)。 – josephus

+0

我的观点是我有图像加密在服务器上,当我通过使用'response = httppost.execute()' - >'entity = response.getEntity' - >'byte [] byteEntity = EntityUtils.toByteArray(entity )'那么我必须将此字节[]转换为字符串,然后用解码密钥进行异或(其实我试图解密,而不是转换为字符串,但不幸的是它不工作。)之后,我必须再次将它转换为byte [],以使其成为ByteArrayOutputStream,如果您对更好的方法有任何想法,非常感谢。 – majorl3oat

回答

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

0

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

+0

谢谢你的回答。但我尝试了你的建议。 'Arrays.equals(byteEntity,byteTest)'做出同样的答案,因为它不相等。 – majorl3oat

0

看一看回答here

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

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

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

+0

谢谢你的回答。但这是什么意思:'char [] base64_1 = MyUtilClass.Base64.encode(byt_1);'什么是'MyUtilClass',在我的项目中'Base64'没有方法'Base64.encode',但有'Base64.encodeBytes byte [] source)'并返回字符串。这是相同的功能? – majorl3oat

+0

我认为Base64.encodeBytes(byte [] source)可能具有相同的Base64.encode行为。我为你提供的例子是在J2ME中,我的意图是给你一个算法。 – rosco

+0

哦,我明白了。非常感谢。我可以用xor算法解决它。 – majorl3oat