【问题标题】:different results when converting byte to blob and back again from blob to byte in java在java中将字节转换为blob并再次从blob转换为字节时的不同结果
【发布时间】:2012-11-28 13:10:35
【问题描述】:

我有一个将指纹模板转换为字节数组(序列化)的任务。然后我比较了两个字节数组,然后将其转换为 blob,然后将其从字节数组转换回 blob。当我打印它们时,它们给了我不同的结果。 这是代码

`Blob blob = con.createBlob();
blob.setBytes(1, enroller.getTemplate().serialize());
System.out.println(enroller.getTemplate().serialize());
//prints [B@53de73a3

int blobLength = (int) blob.length();  
byte[] blobAsBytes = blob.getBytes(1, blobLength);
System.out.println(blobAsBytes);
//prints [B@3179fd59`

有什么想法吗?

编辑:我也尝试使用 array.equals(),但它给了我一个错误的输出。

【问题讨论】:

    标签: java


    【解决方案1】:

    为什么你会期望这些是一样的?您正在使用 toString() 方法在字节数组上打印,这将为您提供类型信息 + 一个与内存位置相关的数字(但 不一定)(它实际上是 @987654322 @ 当toString() 未被覆盖时)。

    如果你想比较这些,那么在两个字节数组上使用equals()。或者可能逐个比较元素(首先检查长度以避免在大小不匹配时进行不必要的遍历)

    【讨论】:

    • 哦,是的,我也试过等于。它给了我一个“假”的输出。有什么方法可以让他们平等吗?
    • 我终于在你的回答中找到了一些线索。谢谢布赖恩:D
    【解决方案2】:

    打印的输出是“java object id”,而不是数组的内容

    【讨论】:

      【解决方案3】:

      您不是在比较数组的内容,而是在比较它们的引用。

      使用Arrays.equals(),其中包含各种原始类型的重载方法。

      【讨论】:

      • 我也试过这样做,但输出错误。我在这里进行从字节到 blob 的正确转换吗?
      • 如果你在那里得到错误,那么内容不相等。在这种情况下,您可以尝试使用 for 循环遍历两个数组,并在第一个不相等的元素处停止。要么在调试器中查看数组的内容......
      猜你喜欢
      • 2012-06-06
      • 2013-06-28
      • 2012-06-07
      • 2018-12-04
      • 2013-01-21
      • 1970-01-01
      • 2017-07-07
      • 2013-04-12
      • 2011-10-03
      相关资源
      最近更新 更多