java.util.UUID.randomUUID().toString() length



java.util.UUID.randomUUID((.toString(( length 总是等于 36?

我无法找到这方面的信息。这里只说以下内容:

公共静态 UUID randomUUID(( 用于检索类型 4(伪随机生成的(UUID 的静态工厂。UUID 是使用加密强度强伪随机数生成器生成的。 返回: 随机生成的 UUID

而那type 4什么也没告诉我。我不知道在这种情况下类型 4 是什么意思。

java.util.UUID.randomUUID((.toString(( 长度总是等于 36 吗?

是的!!

UUID实际上是 128 位值(2 长(。为了将 128 位表示为十六进制字符串,将有128/4=32个字符(每个字符长 4 位(。在字符串格式中,它还包含4(-(,这就是为什么长度是36。

示例:54947df8-0e9e-4471-a2f9-9af509fb5889

32 个十六进制字符 + 4 个连字符字符 = 36 个字符。所以长度将始终相同。

<小时 />

#Update:

我不知道类型4在这种情况下是什么意思。?

仅供参考:有几种方法可以生成UUID。这里的type-4表示此 uuid 是使用随机或伪随机数生成的。来自维基 - Universally_unique_identifier#版本:

UUID 版本

对于变体 1 和 2,标准中定义了五个"版本",在特定用例中,每个版本可能比其他版本更合适。版本由字符串表示中的 M 表示。

版本 1UUID 由时间和节点 ID(通常是 MAC 地址(生成;

版本 2UUID 由标识符(通常是组或用户 ID(、时间和节点 ID 生成;

版本 3 和 5生成通过对命名空间标识符和名称进行哈希处理生成的确定性 UUID;

版本 4UUID 是使用随机或伪随机数生成的。

您可以使用base64将UUIDv4 16字节二进制转换为24字节ascii,而不是编码为ascii-hex(32字节(

对于那些像我这样在阅读javadoc之前开始谷歌搜索的人来说,这里的javadoc;)

UUID.toString

对于那些不知道如何阅读语法树的人,从下到上阅读。一个十六进制数字是一个字符,一个十六进制八进制是 2 个十六进制数字 = 2 个字符 一个节点是 6 * 十六进制 = 6 * 2十六进制数字 = 6*2 个字符 = 12 个字符 一个变体_and_sequence是 2 * 十六进制 = 2 * 2 十六进制数字 = 2*2 个字符 = 4个字符 一个time_high_and_version是 2 * 十六进制八进制 = 2 * 2十六进制数字 = 2*2 个字符 = 4个字符 一个time_mid是 2 * 十六进制八进制 = 2 * 2十六进制数字 = 2





*2 个字符 = 4个字符
time_low是 4 * 十六进制八进制 = 4* 2 十六进制数字 = 4*2 个字符 = 8 个字符
,最后,UUID"-""-""-""-"<节点>

= 8 个字符 + 1 个字符 + 4 个字符 + 1 个字符 + 4 个字符 + 1 个字符 + 4 个字符 + 1 个字符+ 1 个字符 + 12 个字符

= 36 个字符! 如前所述,128 位数据 + 4 个连字符

The UUID string representation is as described by this BNF: 
UUID                   = <time_low> "-" <time_mid> "-"
<time_high_and_version> "-"
<variant_and_sequence> "-"
<node>
time_low               = 4*<hexOctet>
time_mid               = 2*<hexOctet>
time_high_and_version  = 2*<hexOctet>
variant_and_sequence   = 2*<hexOctet>
node                   = 6*<hexOctet>
hexOctet               = <hexDigit><hexDigit>
hexDigit               =
"0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
| "a" | "b" | "c" | "d" | "e" | "f"
| "A" | "B" | "C" | "D" | "E" | "F"

最新更新