0

我目前正在尝试将 JPEG 图像从本地 java 项目目录转换为字节数组以通过 tcp 连接发送。

这是目前我将文件转换为字节数组的方式:

BufferedImage imageBuff = ImageIO.read(new File("res/image.jpg"));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(imageBuff, "JPEG", baos);
byte[] res = baos.toByteArray();
System.out.println(baos.toByteArray());

对于为什么会发生这种情况,我似乎找不到可靠的答案,但是每次转换它时,数据都不一致:

系统输出:

[B@23f23303
[B@6299504b
[B@417f69df

字节数组到底应该是什么样子?不幸的是,它显然不适用于我的 TCP 连接的另一端。我认为每次尝试转换时输出都会具有相同的输出,不是吗?

4

3 回答 3

1

您正在toString调用byte[]. 数组不会覆盖toString(),因此您会在以下位置看到实现Object

Object 类的 toString 方法返回一个字符串,该字符串由对象作为其实例的类的名称、at 符号字符“@”和对象哈希码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:

getClass().getName() + '@' + Integer.toHexString(hashCode())

所以换句话说,这与字节数组中的数据无关。用于Arrays.toString(byte[])获取实际上看起来合理的字符串表示 - 尽管您可能会发现十六进制转换更易于阅读。

于 2013-11-04T16:37:14.620 回答
0

[B@23f23303是数组对象的字符串表示,而不是数组的内容。

您可以使用System.out.println(Arrays.toString(baos.toByteArray()));

于 2013-11-04T16:37:05.893 回答
0

您正在打印出数组本身的信息(特别是 的数组类型[Bbyte[]然后是指向数组内容的指针)。您可能想要打印Arrays.toString(res).

于 2013-11-04T16:37:48.167 回答