簡體   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