java.util.UUID.randomUUID().toString()长度总是等于36吗?
我没能找到这方面的信息。这里据说只有以下几点:
公共静态UUID randomUUID()静态工厂检索类型4(伪随机生成) UUID。UUID是使用加密强伪随机数生成器生成的。返回:随机生成的UUID
type 4
什么也没告诉我。我不知道4型在这种情况下是什么意思。
发布于 2017-07-29 10:16:04
java.util.UUID.randomUUID().toString()长度总是等于36吗?
是的!!是。
一个UUID
实际上是一个128位值(2长)。要将128位表示为十六进制字符串,将有128/4=32
字符(每个字符有4位长)。在字符串格式中,它还包含4 (-
),这就是长度为36的原因。
示例:54947df8-0e9e-4471-a2f9-9af509fb5889
32六角字符+4连字符= 36字符。所以长度总是一样的。
更新:
我不知道4型在这种情况下是什么意思。
FYI:有几种生成UUID的方法。在这里,类型4意味着这个uuid是使用随机或伪随机数生成的。来自wiki - identifier#Versions
版本 对于变体1和变体2,标准中定义了五个“版本”,每个版本在特定用例中可能比其他版本更合适。版本由字符串表示中的M表示。 版本1 UUID是从一个时间和一个节点id (通常是地址)生成的; 版本2 UUID由标识符(通常是组或用户id)、时间和节点id生成; 版本3和5通过散列名称空间标识符和名称生成确定性UUID; version 4 UUID使用随机或伪随机数生成.
发布于 2018-12-12 09:14:58
您可以使用UUIDv4将16字节二进制文件转换为24字节ascii,而可以将其编码为ascii-十六进制(32字节)。
发布于 2019-05-18 08:42:17
对于像我这样在阅读javadoc之前开始搜索的人,这里是javadoc ;)
对于那些不知道如何阅读语法树的人,从下到上阅读。
hexDigit是一个字符
hexOctet是2 hexDigits =2 2chars
节点为6* hexOctet = 6*2十六进制=6*2字符=12 chars。
A variant_and_sequence为2* hexOctet = 2*2十六进制=2*2字符=4 chars
A time_high_and_version为2* hexOctet = 2*2十六进制=2*2字符=4 chars
A time_mid为2* hexOctet = 2*2十六进制=2*2字符=4 chars
A time_low为4* hexOctet = 4*2十六进制=4*2字符=8字符
最后,UUID为< time_low >-“< time_mid > "-"< time_high_and_version > "-”< variant_and_sequence > "-“< node >”
=8个字符+1个字符+4个字符+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"
https://stackoverflow.com/questions/45388021
复制相似问题