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