我想基于对象生成UUID。相同的对象需要具有相同的UUID。
我读到了类型3 UUID,其值基于名称和命名空间。 java.util.UUID
有一个nameUUIDFromBytes
方法,它将一个字节数组作为参数。
所以我想把我的对象序列化为字节数组并将它们提供给nameUUIDFromBytes
方法。
但我对UUID的名称空间方面感到困惑。这是否意味着在另一台机器上生成UUID会有所不同?
生成UUID的最佳方式是什么时候obj1.equals(obj2) == true
,然后uuid1.equals(uuid2) == true
即使在uuid2上生成uuid1而不是uuid2?
编辑:对于那些投票赞成如何实现hashCode的人,请重新打开它。我问的是UUID,而不是hashCodes。除非您认为生成UUID的最佳方法是使用hashCode。如果是这样,请写一个答案,说明为什么这是最好的方式,而不是用与它几乎无关的东西来结束这个问题。
答案 0 :(得分:2)
操作系统将生成的UUID保留将来自机器的信息与时间信息& c混合的权利。 (事实上,早期的Microsoft UUID生成器会获取网卡信息,因为它可以从生成的UUID中支持,所以非常不安全!)
因此,使用您喜欢的UUID生成器是不合适的。
你可以做的是基本上增强用于创建哈希码的方法,将其扩展到128位。将该字节数组转换为UUID格式,您就完成了。
答案 1 :(得分:1)
不同机器的结果相同。就像哈希他们一样。
通过使用nameUUIDFromBytes,您可以创建符合类型3的uuid。