Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 图像到字节数组不一致_Java_Image_Tcp - Fatal编程技术网

Java 图像到字节数组不一致

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

我目前正在尝试将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连接的另一端显然不起作用。我认为每次尝试转换时,输出都会有相同的输出,不是吗[B@23f23303是数组对象的字符串表示形式,而不是数组的内容


您可以使用
System.out.println(Arrays.toString(baos.toByteArray());
您正在对
字节[]
调用
toString
。数组不会覆盖
toString()
,因此您会看到:

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

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

换言之,这与字节数组中的数据无关。用于获取实际看起来合理的字符串表示形式-尽管您可能会发现十六进制转换更易于阅读。

您正在打印数组本身的信息(具体来说,数组类型
[B
表示
字节[]
,然后是指向数组内容的指针)。您可能想打印
数组。toString(res)

非常感谢您的解释!我所做的一切以及每次不同的原因都很有意义。