如何在没有更改数据的情况下将数组字节传递给getReader。
byte_msg = Some array byte
println(">>>" + byte_msg)
HttpServletRequest.getReader returns new BufferedReader(
new InputStreamReader(new ByteArrayInputStream(byte_msg)))
并发布收件人:
byte_msg = IOUtils.toByteArray(post.request.getReader)
println("<<<" + byte_msg)
打印返回。为什么我会得到不同的答案?
>>>[B@38ffd135
<<<[B@60c0c8b5
答案 0 :(得分:2)
您打印出byte[].toString()
的结果 - 不是字节数组的值...它只是Object.toString()
返回的值 - { {1}}表示“字节数组”,[B
然后是哈希码。您需要将数据转换为十六进制或类似的东西 - 您需要明确地执行此操作。例如,您可以使用Hex
中的Apache Commons Codec类:
@
如果这是任意二进制数据,则不应该不使用String hex = new String(Hex.encode(byte_msg));
将其转换为字符串。 InputStreamReader
是为二进制数据设计的,它是编码的文本数据 - 而IMO也应该指定编码。
如果你想传输任意二进制数据,你应该 传输它而不转换成文本(所以看看你的帖子类是否允许)或使用像十六进制或base64转换为/来自二进制数据安全。
答案 1 :(得分:0)
IOUtils.toByteArray
创建一个新的ByteArrayOutputStream
,然后使用toByteArray()
创建一个新的byte[]
,这个新对象的数组有一个新的对象ID(您看到的哈希码) ,这是不同的)。即使数组的内容没有改变,也会发生这种情况。
在这种情况下,仅仅观察(通过IOUtils.toByteArray
)已经改变了输出,因为此检查会创建一个新的byte[]
;)
如Jon所说,检查数组的内容以查看是否有任何更改。
答案 2 :(得分:0)
为了打印内容数组,您可以使用以下命令将数组内容转换为字符串:
java.util.Arrays.toString(byte[])
然后将结果打印到stdout。
println(">>>" + Arrays.toString(byte_msg));
j.u.Arrays文档在这里。