2012-05-08 48 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