Java 图像到字节数组不一致
我目前正在尝试将JPEG图像从本地java项目目录转换为字节数组,以便通过tcp连接发送 这是我当前将文件转换为字节数组的方式:Java 图像到字节数组不一致,java,image,tcp,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.to
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连接的另一端显然不起作用。我认为每次尝试转换时,输出都会有相同的输出,不是吗[B@23f23303是数组对象的字符串表示形式,而不是数组的内容
您可以使用
System.out.println(Arrays.toString(baos.toByteArray());
您正在对字节[]
调用toString
。数组不会覆盖toString()
,因此您会看到:
class对象的toString方法返回一个字符串,该字符串由对象作为实例的类的名称、at符号字符“@”和对象哈希代码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
换言之,这与字节数组中的数据无关。用于获取实际看起来合理的字符串表示形式-尽管您可能会发现十六进制转换更易于阅读。您正在打印数组本身的信息(具体来说,数组类型
[B
表示字节[]
,然后是指向数组内容的指针)。您可能想打印数组。toString(res)
非常感谢您的解释!我所做的一切以及每次不同的原因都很有意义。