Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java UUID生成_Java_Uuid - Fatal编程技术网

Java UUID生成

Java UUID生成,java,uuid,Java,Uuid,我想基于对象生成UUID。相等的对象需要具有相同的UUID 我了解到类型3 UUID,其值基于名称和命名空间java.util.UUID有一个nameuidFromBytes方法,该方法将字节数组作为参数 因此,我考虑将对象序列化为字节数组,并将其提供给nameuidfrombytes方法 但我对UUID的名称空间方面感到困惑。这是否意味着UUID在另一台机器上生成时会有所不同 生成UUID的最佳方法是什么,当obj1.equals(obj2)=true时,即使uuid1是在uuid2以外的另一

我想基于对象生成UUID。相等的对象需要具有相同的UUID

我了解到类型3 UUID,其值基于名称和命名空间
java.util.UUID
有一个
nameuidFromBytes
方法,该方法将字节数组作为参数

因此,我考虑将对象序列化为字节数组,并将其提供给
nameuidfrombytes
方法

但我对UUID的名称空间方面感到困惑。这是否意味着UUID在另一台机器上生成时会有所不同

生成UUID的最佳方法是什么,当
obj1.equals(obj2)=true
时,即使uuid1是在uuid2以外的另一台机器上生成的,那么
uuid1.equals(uuid2)=true


编辑:对于那些投票认为这是如何实现哈希代码的副本的人,请重新打开这个。我问的是uuid,不是hashcode。除非您认为生成UUID的最佳方法是使用哈希代码。如果是这样,请写一个答案,说明为什么这是最好的方式,而不是用与此几乎无关的东西来结束这个问题。

操作系统将生成的UUID保留将来自机器的信息与时间信息混合在一起的权利&c。(事实上,早期的Microsoft UUID生成器会获取网卡信息,这是非常不安全的,因为有可能从生成的UUID中收回这些信息!)

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


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

不同机器的结果是相同的。这就像是对它们进行哈希运算


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

覆盖相等可能的重复是否存在隐式“不相等的对象不能具有相同的uuid”?@ΦXocę웃Пepeúpaツ 我应该指定:我显然会覆盖equals方法。这不是问题所在。问题是如何生成UUID。@roeygol除非您建议基于哈希代码生成UUID,否则我认为这些问题很难重复。有一个基于用户提供的名称的MD5摘要而不使用任何机器特定信息的问题。例如,查看
java.util.UUID#nameuidFrombytes
方法的源代码,除了MD5散列和将结果字节重新打包为UUID之外,没有其他内容。因此,原始问题的作者完全可以借助Java序列化或NIO将
equals
中使用的所有类字段打包为byte[],并将生成的字节传递给
nameuidfrombytes
,以获得类型3 UUID。