读取相同的文件但获取不同的字节

dak*_*kan 1 hash scala

在左折叠中,我试图消化不同的图像。我很沮丧,决定读取同一个文件,但我收到了不同的字节数组来读取同一个文件!有谁知道为什么会发生这种情况?这是发生这种情况的代码,“swap.png”在运行期间永远不会改变

  val capturedImage = outputScreen.capture
  val swap = new File("swap1.png")
  ImageIO.write(capturedImage, "png", swap)
  val bis = new BufferedInputStream(new FileInputStream("swap.png"))
  val byte = Stream.continually(bis.read).takeWhile(-1 !=).map(_.toByte).toArray
  println(byte.toString)
Run Code Online (Sandbox Code Playgroud)

这是一些输出

[B@31302ed5
[B@3a56d071
[B@6039d718
[B@3490e5eb
[B@2f29608e
[B@4c09c5c3
Run Code Online (Sandbox Code Playgroud)

om-*_*nom 5

您得到的是字节数组的 toString 表示形式(因为[B),默认为Object.toString()。Object.toString 的作用是什么?通常,它只是打印有关对象在内存中位置的内部信息(所谓的身份哈希)*。因此,在不同的运行中,不同的 RAM 内存位置有不同的对象,从而产生不同的输出,这是完全可以的。.mkString(",")尝试不要在最后一行执行此问题:

println(byte.mkString(","))
Run Code Online (Sandbox Code Playgroud)

* 但可能有不同的实现