0

左折で、私はさまざまな画像を消化しようとしています。私は欲求不満になり、同じファイルを読み取ることにしました。同じファイルを読み取るために異なるバイト配列を受け取りました。なぜこれが起こっているのか誰かが知っていますか?これが発生しているコードです。「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)

ここにいくつかの出力があります

[B@31302ed5
[B@3a56d071
[B@6039d718
[B@3490e5eb
[B@2f29608e
[B@4c09c5c3
4

1 に答える 1

4

あなたが得ているのは、[BデフォルトでObject.toString() になるバイト配列の toString 表現です( のため)。Object.toString は何をしますか? 通常、オブジェクトがメモリ内のどこにあるかに関する内部情報を出力するだけです (いわゆるID ハッシュ)*。そのため、実行ごとに RAM メモリの異なる場所に異なるオブジェクトがあり、結果が異なることはまったく問題ありません。.mkString(",")最後の行でこの問題を実行する代わりに試してください:

println(byte.mkString(","))

* ただし、実装が異なる場合があります

于 2013-03-18T04:35:10.320 に答える