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