2011-09-04 104 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文档在这里。