<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Java UUID 生成器示例 > 原文: [https://howtodoinjava.com/java/basics/java-uuid/](https://howtodoinjava.com/java/basics/java-uuid/) 了解什么是 UUID 及其版本和變體。 學習使用`UUID.randomUUID()` API 在 Java 中生成 UUID。 另請學習用 Java 生成版本 5 UUID。 ## 1\. 什么是 UUID? **UUID** (*通用唯一標識符*),也稱為 **GUID** (*全局唯一標識符*)是`128 bits`長標識符,相對于所有其他 UUID 的空間而言。 它不需要中央注冊過程。 結果,按需生成可以完全自動化,并用于多種目的。 要了解 **UUID** 的獨特性,您應該知道 UUID 生成算法支持非常高的分配速率,每臺機器每秒可支持高達 *1000 萬*的速度,因此甚至可以用作事務 ID。 我們可以應用排序,排序并將它們存儲在數據庫中。 通常,它在編程中很有用。 由于 UUID 是唯一且持久的,因此與其他替代方法相比,它們具有出色的*統一資源名稱(URN)*,挖掘成本最低。 *空的 UUID(UHTID)是 UUID 的一種特殊形式,它指定將所有 128 位都設置為零。* 不要以為 UUID 很難猜測; 它們不應用作安全特性。 可預測的隨機數源將加劇這種情況。 人類沒有能力僅僅看一眼就能輕易地檢查 UUID 的完整性。 ## 2\. UUID 類型 典型的 UUID 以`8-4-4-4-12`的形式顯示在 **5 組**中,由連字符分隔,總共 36 個字符(**32 個字母數字字符和 4 個連字符**)。 > `123e4567-e89b-12d3-a456-426655440000` > > `xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx` 在此`'M'`表示 **UUID 版本**,`'N'`表示 **UUID 變體**。 * **變體**字段包含一個值,該值標識 UUID 的布局。 * **版本**字段包含一個描述此 UUID 類型的值。 UUID 有五種不同的基本類型。 1. 基于時間的 UUID(版本 1) – 根據時間和節點 ID 生成 2. DCE(分布式計算環境)安全性(版本 2) – 由標識符(通常是組或用戶 ID),時間和節點 ID 生成 3. 基于名稱(版本 3) – 由 [MD5](https://howtodoinjava.com/java/io/how-to-generate-sha-or-md5-file-checksum-hash-in-java/) (128 位)的名稱空間標識符和名稱的哈希值生成 4. 隨機生成的 UUID(版本 4) – 使用隨機或偽隨機數生成 5. 基于名稱的使用 SHA-1 哈希(版本 5)**推薦的** – 由 [SHA-1](https://howtodoinjava.com/security/how-to-generate-secure-password-hash-md5-sha-pbkdf2-bcrypt-examples/) (160 位)哈希處理的名稱空間標識符和名稱。 Java 不提供其實現。 我們將創造自己的。 ## 3\. Java UUID 示例 #### 3.1 `UUID.randomUUID()` – 版本 4 默認 API [`randomUUID()`](https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html#randomUUID--)是一個靜態工廠,用于檢索類型 4(偽隨機生成的)UUID。 對于大多數用例來說已經足夠了。 ```java UUID uuid = UUID.randomUUID(); System.out.println(uuid); System.out.println(uuid.variant()); //2 System.out.println(uuid.version()); //4 ``` 程序輸出。 ```java 17e3338d-344b-403c-8a87-f7d8006d6e33 2 4 ``` #### 3.2 生成版本 5 UUID Java 沒有提供內置 API 來生成版本 5 UUID,因此我們必須創建自己的實現。 以下是一種這樣的實現。 ([參考](https://github.com/rootsdev/polygenea/blob/master/java/src/org/rootsdev/polygenea/UUID5.java))。 ```java import java.nio.ByteOrder; import java.nio.charset.Charset; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.UUID; public class UUID5 { public static UUID fromUTF8(String name) { return fromBytes(name.getBytes(Charset.forName("UTF-8"))); } private static UUID fromBytes(byte[] name) { if (name == null) { throw new NullPointerException("name == null"); } try { MessageDigest md = MessageDigest.getInstance("SHA-1"); return makeUUID(md.digest(name), 5); } catch (NoSuchAlgorithmException e) { throw new AssertionError(e); } } private static UUID makeUUID(byte[] hash, int version) { long msb = peekLong(hash, 0, ByteOrder.BIG_ENDIAN); long lsb = peekLong(hash, 8, ByteOrder.BIG_ENDIAN); // Set the version field msb &= ~(0xfL << 12); msb |= ((long) version) << 12; // Set the variant field to 2 lsb &= ~(0x3L << 62); lsb |= 2L << 62; return new UUID(msb, lsb); } private static long peekLong(final byte[] src, final int offset, final ByteOrder order) { long ans = 0; if (order == ByteOrder.BIG_ENDIAN) { for (int i = offset; i < offset + 8; i += 1) { ans <<= 8; ans |= src[i] & 0xffL; } } else { for (int i = offset + 7; i >= offset; i -= 1) { ans <<= 8; ans |= src[i] & 0xffL; } } return ans; } } ``` ```java UUID uuid = UUID5.fromUTF8("954aac7d-47b2-5975-9a80-37eeed186527"); System.out.println(uuid); System.out.println(uuid.variant()); System.out.println(uuid.version()); ``` ```java d1d16b54-9757-5743-86fa-9ffe3b937d78 2 5 ``` 向我提供有關在 Java 中生成 UUID 的問題。 學習愉快! 參考: [Rfc 4122](https://tools.ietf.org/html/rfc4122)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看