代码之家  ›  专栏  ›  技术社区  ›  angelcervera

在case类中表示字节数组(SHA256)的正确方法

  •  0
  • angelcervera  · 技术社区  · 6 年前

    我需要在case类中存储一个字节序列(散列)。

    我的第一个方法是使用 Array[Byte] 但它打破了case类的平等属性。下一个例子失败了。

    "compare arrays" in {
       case class CaseClassWithHash(id: Int, hash: Array[Byte])
       CaseClassWithHash(0, Array[Byte](192.toByte, 168.toByte)) == CaseClassWithHash(0, Array[Byte](192.toByte, 168.toByte)) shouldBe true
    }
    

    所以我的问题是,哪一种是表示字节数组的最佳方式:

    • 我不会操纵它。
    • 我需要==在case类中工作(上一个单元测试)。
    • 内存使用至关重要。
    • 它将始终是32字节(sha256)。

    附笔。 Case Class equality for Arrays 这不是我问题的答案。我要求正确替换一个数组来表示SHA256值,当然,覆盖equals函数不是正确的方法。

    1 回复  |  直到 6 年前
        1
  •  0
  •   James Whiteley    6 年前

    改变 Array Seq 似乎对我有用。我不确定内存使用情况,但Seq非常可靠且快速。

    case class CaseClassWithHash(id: Int, hash: Seq[Byte])
    
    println(CaseClassWithHash(0, Seq[Byte](192.toByte, 168.toByte)) == CaseClassWithHash(0, Seq[Byte](192.toByte, 168.toByte)))
    // true
    

    作为 linked potential duplicate 建议(链接点) here ),如果坚持使用数组,则需要定义自定义 equals 方法