将数组字节传递给getReader

时间:2011-09-04 11:14:41

标签: java http

如何在没有更改数据的情况下将数组字节传递给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

3 个答案:

答案 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文档在这里。