Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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 生成128个字符长uuid的最有效方法?_Java - Fatal编程技术网

Java 生成128个字符长uuid的最有效方法?

Java 生成128个字符长uuid的最有效方法?,java,Java,目前,您可以使用以下方法生成随机UUID: UUID.randomUUID().toString(); 这将产生以下字符串: 94f3c8a3-a161-468f-9844-de92dd90ace7 它是36个字符长的…太小了,不能作为一个ID来使用,例如,我希望会有很多冲突 我想生成至少128个字符长的字符串…通过使用sha512 alg,我可以获得更长的字符串,但sha512是安全的,不是高效的。 我可以使用什么来获得更长的ID,但对性能的影响较小?您的声明: 这是36个字符长…太小,无

目前,您可以使用以下方法生成随机UUID:

UUID.randomUUID().toString();
这将产生以下字符串:

94f3c8a3-a161-468f-9844-de92dd90ace7

它是36个字符长的…太小了,不能作为一个ID来使用,例如,我希望会有很多冲突

我想生成至少128个字符长的字符串…通过使用sha512 alg,我可以获得更长的字符串,但sha512是安全的,不是高效的。 我可以使用什么来获得更长的ID,但对性能的影响较小?

您的声明:

这是36个字符长…太小,无法使用

很可能是不正确的,除非您正在进行加密。这36个字符按照编码128位值。假设UUID版本4由
UUID.randomUUID()
方法返回,进一步引用wiki:

与其他UUID一样,四位 用于指示版本4,2或3位用于指示 变量(变量1和变量2分别为10或110)。因此 变体1(即大多数UUID)随机版本4的UUID将有6个 预定的变体和版本位,为 随机生成的零件,总计为2^122或5.3x10^36(5.3 未确定)可能的版本4变体1 UUID

您极不可能在代码中遇到任何冲突。它们可能发生,但:

因此,如果有十亿分之一的复制机会,103 必须生成版本4的UUID


为什么不获取几个UUID并连接起来呢?“太小了,不能用作持久化的ID。”真的吗?你以为会有很多碰撞?那你就想错了。只是为了有帮助的阅读,我投票以离题的方式结束这个问题,因为它是基于作者的误解,即UUID在某种程度上容易发生冲突。这个问题的作者误解了s,并且误解了数字的范围是128位(或122位)。至于大,读或读。虽然正确生成的版本4 UUID对于大多数目的来说已经足够好了,但如果您想消除任何实际的冲突可能性,请使用版本1。您可以从Java库、本机代码或数据库或web服务中获得这些信息。我想说的是,“您的代码中不太可能发生任何冲突。”此外,为了有效消除任何冲突的可能性,请使用基于时间和空间的版本1值,而不是基于随机的版本4。添加极端部分,这使它更清楚,谢谢。