Java UUID生成

时间:2017-02-08 10:58:16

标签: java uuid

我想基于对象生成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。如果是这样,请写一个答案,说明为什么这是最好的方式,而不是用与它几乎无关的东西来结束这个问题。

2 个答案:

答案 0 :(得分:2)

操作系统将生成的UUID保留将来自机器的信息与时间信息& c混合的权利。 (事实上​​,早期的Microsoft UUID生成器会获取网卡信息,因为它可以从生成的UUID中支持,所以非常不安全!)

因此,使用您喜欢的UUID生成器是不合适的。

可以做的是基本上增强用于创建哈希码的方法,将其扩展到128位。将该字节数组转换为UUID格式,您就完成了。

答案 1 :(得分:1)

不同机器的结果相同。就像哈希他们一样。

通过使用nameUUIDFromBytes,您可以创建符合类型3的uuid。

相关问题