繁体   English   中英

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

[英]java.util.UUID.randomUUID().toString() length

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

我无法找到相关信息。 这里只说以下内容:

public static 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十六进制char + 4连字符char = 36 char。 所以长度总是一样的。


更新:

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

仅供参考:有几种方法可以生成UUID。 这里类型4表示使用随机或伪随机数生成此uuid。 来自wiki - Universally_unique_identifier#Versions

版本

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

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

版本2 UUID是根据标识符(通常是组或用户ID),时间和节点ID生成的;

版本3和5生成通过散列命名空间标识符和名称生成的确定性UUID;

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

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

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

根据UUID.toString

对于那些不知道如何阅读从下到上阅读的语法树的人。
hexDigit是一个char
hexOctet是2 hexDigits = 2chars
节点是6 * hexOctet = 6 * 2hexdigit = 6 * 2 chars = 12chars
变量 _and_sequence是2 * hexOctet = 2 * 2hexdigit = 2 * 2 chars = 4chars
time_high_and_version是2 * hexOctet = 2 * 2hexdigit = 2 * 2 chars = 4chars
time_mid是2 * hexOctet = 2 * 2hexdigit = 2 * 2 chars = 4chars
time_low是4 * hexOctet = 4 * 2hexdigit = 4 * 2 chars = 8chars
最后, UUID是<time_low>“ - ”<time_mid>“ - ”<time_high_and_version>“ - ”<variant_and_sequence>“ - ”<node>

= 8个字符+ 1个字符+ 4个字符+ 1个字符+ 4个字符+ 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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM