首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java.util.UUID.randomUUID().toString()长度

java.util.UUID.randomUUID().toString()长度
EN

Stack Overflow用户
提问于 2017-07-29 10:13:32
回答 3查看 70.7K关注 0票数 63

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

我没能找到这方面的信息。这里据说只有以下几点:

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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使用随机或伪随机数生成.

票数 85
EN

Stack Overflow用户

发布于 2018-12-12 09:14:58

您可以使用UUIDv4将16字节二进制文件转换为24字节ascii,而可以将其编码为ascii-十六进制(32字节)。

票数 4
EN

Stack Overflow用户

发布于 2019-05-18 08:42:17

对于像我这样在阅读javadoc之前开始搜索的人,这里是javadoc ;)

UUID.toString

对于那些不知道如何阅读语法树的人,从下到上阅读。

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连字符(如前所述)

代码语言:javascript
运行
复制
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"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45388021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档