在uuid5实现中是否必须使用名称空间?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在uuid5实现中是否必须使用名称空间?相关的知识,希望对你有一定的参考价值。

我正在尝试用java测试uuid5的各种实现,并使用python作为参考实现,因为它是由corelibs提供的。但是,看起来python的uuid5要求传递一个命名空间uuid作为第一个参数。 “无”将不起作用。但是,Java的com.fasterxml.uuid.Generators nameBasedGenerator将接受名称空间的“空”。哪个是正确的?是否有用于uuid5生成的“全局”或“默认”名称空间的概念。

答案

是否存在用于uuid5生成的“全局”或“默认”名称空间的概念。

UUID RFC中没有这样的概念。名称空间代表命名系统,将从中提取您正在使用的名称。没有通用的命名系统,因此谈论“全局”名称空间是没有意义的。但是,有一些标准的名称空间UUID。它们记录在RFC 4122 Appendix C

Python的uuid5需要传递一个命名空间uuid作为第一个参数。 None将不起作用。但是,Java的com.fasterxml.uuid.Generators nameBasedGenerator将接受名称空间的null

com.fasterxml.uuid.Generators API不是标准的Java API。用于UUID的标准Java API为java.util.UUID,但不支持5型UUID生成。

哪个是正确的?

我看了com.fasterxml.uuid.Generators的代码。如果提供了null名称空间,则跳过将名称空间UUID与名称连接在一起的步骤。这与RFC 4122 Section 4.3中列出的类型3/5算法不符,因此从技术上讲是不正确的。

但是,与RFC的这种偏离不应破坏任何东西。它不会以比通常预期的类型3/5 UUID更高的速率生成UUID冲突。我倾向于将其称为无害(尽管是非标准的)扩展。

所以...

名称空间在uuid5实现中是强制性的吗?

RFC并未声明名称空间是强制性的,如果没有提供名称空间,该怎么办。一般而言,UUID生成API,尤其是该API行为是当前编写的RFC的[[超出范围。

以上是关于在uuid5实现中是否必须使用名称空间?的主要内容,如果未能解决你的问题,请参考以下文章

命名空间

Python - 模块

是否可以动态编译和执行 C# 代码片段?

是否可以获得已定义名称空间的列表

世界空间逆投影透视

名称后跟 :: 必须是类或命名空间名称