2011-09-04 144 views
2

如何在不更改數據的情況下將數組字節傳遞給getReader。傳遞數組字節到getReader

byte_msg = Some array byte 
println(">>>" + byte_msg) 
HttpServletRequest.getReader returns new BufferedReader(
    new InputStreamReader(new ByteArrayInputStream(byte_msg))) 

和POST reciever:

byte_msg = IOUtils.toByteArray(post.request.getReader) 
println("<<<" + byte_msg) 

和打印的回報。爲什麼我會得到不同的答案?

>>>[[email protected] 
<<<[[email protected] 

回答

2

你打印出的byte[].toString()的結果 - 這不是字節數組的價值......它只是由Object.toString()返回的值 - [B爲「字節數組」,@然後哈希碼。你需要將數據轉換爲十六進制或類似的東西 - 你需要明確地做。例如,你可以使用Hex類從Apache Commons Codec

String hex = new String(Hex.encode(byte_msg)); 

這並不是說,如果這是任意的二進制數據,你應該使用InputStreamReader將其轉換爲字符串在首位。 InputStreamReader是爲編碼文本數據的二進制數據而設計的 - 而IMO也應該指定編碼。

如果要傳輸任意的二進制數據,你應該要麼轉移它無需任何轉換成文本(所以看到您的帖子類是否允許)使用類似十六進制或Base64轉換到/從二進制數據安全

+0

非常感謝。 – DarkAnthey

0

IOUtils.toByteArray創建一個新的ByteArrayOutputStream然後使用toByteArray()它創建了一個新的和byte[]這個陣列是新的對象有一個新的對象ID(你看到的哈希碼,這是不同的)。即使數組的內容沒有改變,也會發生這種情況。

在這種情況下,僅僅觀察(通過IOUtils.toByteArray)已經改變了輸出,因爲該檢查創建一個新的byte[]

正如喬恩說,檢查陣列的內容,以查看是否有任何變化。

0

爲了打印的內容陣列可以使用數組的內容轉換爲字符串:

java.util.Arrays.toString(byte[]) 

,然後打印出結果到標準輸出。

println(">>>" + Arrays.toString(byte_msg)); 

j.u.Arrays文檔在這裏。