图像到字节数组不一致

时间:2013-11-04 16:36:02

标签: java image tcp

我目前正在尝试将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连接的另一端工作。我认为每次尝试转换时输出都会有相同的输出,不是吗?

3 个答案:

答案 0 :(得分:1)

您正在toString上致电byte[]。数组不会覆盖toString(),因此您会看到implementation in Object

  

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

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

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

答案 1 :(得分:0)

[B@23f23303是数组对象的String表示形式,而不是数组的内容。

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

答案 2 :(得分:0)

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