阅读(278) (6)

鸿蒙OS UUID

2022-06-16 16:30:57 更新

UUID

java.lang.Object

|---java.util.UUID

public final class UUID
extends Object
implements Serializable, Comparable<UUID>

表示不可变的通用唯一标识符 (UUID) 的类。 UUID 代表一个 128 位的值。

这些全局标识符存在不同的变体。 此类的方法用于操作 Leach-Salz 变体,尽管构造函数允许创建 UUID 的任何变体(如下所述)。

变体 2 (Leach-Salz) UUID 的布局如下: 最重要的 long 由以下无符号字段组成:

 0xFFFFFFFF00000000 time_low
 0x00000000FFFF0000 time_mid
 0x000000000000F000 version
 0x0000000000000FFF time_hi

最不重要的 long 由以下无符号字段组成:

 0xC000000000000000 variant
 0x3FFF000000000000 clock_seq
 0x0000FFFFFFFFFFFF node

变量字段包含一个标识 UUID 布局的值。 上述位布局仅对变体值为 2 的 UUID 有效,表示 Leach-Salz 变体。

version 字段包含一个描述此 UUID 类型的值。 UUID 有四种不同的基本类型:基于时间、DCE 安全、基于名称和随机生成的 UUID。 这些类型的版本值分别为 1、2、3 和 4。

构造函数摘要

构造函数 描述
UUID(long mostSigBits, long leastSigBits) 使用指定的数据构造一个新的 UUID。

方法总结

修饰符和类型 方法 描述
int clockSequence() 与此 UUID 关联的时钟序列值。
int compareTo(UUID val) 将此 UUID 与指定的 UUID 进行比较。
boolean equals(Object obj) 将此对象与指定对象进行比较。
static UUID fromString(String name) 根据 toString() 方法中描述的字符串标准表示创建 UUID。
long getLeastSignificantBits() 返回此 UUID 的 128 位值的最低有效 64 位。
long getMostSignificantBits() 返回此 UUID 的 128 位值的最高有效 64 位。
int hashCode() 返回此 UUID 的哈希码。
static UUID nameUUIDFromBytes(byte[] name) 基于指定字节数组检索类型 3(基于名称)UUID 的静态工厂。
long node() 与此 UUID 关联的节点值。
static UUID randomUUID() 用于检索类型 4(伪随机生成)UUID 的静态工厂。
long timestamp() 与此 UUID 关联的时间戳值。
String toString() 返回表示此 UUID 的 String 对象。
int variant() 与此 UUID 关联的变体编号。
int version() 与此 UUID 关联的版本号。
从类 java.lang.Object 继承的方法
clone, finalize, getClass, notify, notifyAll, wait, wait, wait

构造函数详细信息

UUID

public UUID(long mostSigBits, long leastSigBits)

使用指定的数据构造一个新的 UUID。 mostSigBits 用于 UUID 的最高有效 64 位,leastSigBits 成为 UUID 的最低有效 64 位。

参数:

参数名称 参数描述
mostSigBits UUID 的最高有效位
leastSigBits UUID 的最低有效位

方法详情

randomUUID

public static UUID randomUUID()

用于检索类型 4(伪随机生成)UUID 的静态工厂。 UUID 是使用加密强的伪随机数生成器生成的。

返回:

随机生成的 UUID

nameUUIDFromBytes

public static UUID nameUUIDFromBytes(byte[] name)

基于指定字节数组检索类型 3(基于名称)UUID 的静态工厂。

参数:

参数名称 参数描述
name 用于构造 UUID 的字节数组

返回:

从指定数组生成的 UUID

fromString

public static UUID fromString(String name)

根据 toString() 方法中描述的字符串标准表示创建 UUID。

参数:

参数名称 参数描述
name 指定 UUID 的字符串

返回:

具有指定值的 UUID

Throws:

Throw名称 Throw描述
IllegalArgumentException 如果 name 不符合 toString() 中描述的字符串表示

getLeastSignificantBits

public long getLeastSignificantBits()

返回此 UUID 的 128 位值的最低有效 64 位。

返回:

此 UUID 的 128 位值的最低有效 64 位

getMostSignificantBits

public long getMostSignificantBits()

返回此 UUID 的 128 位值的最高有效 64 位。

返回:

此 UUID 的 128 位值的最高有效 64 位

version

public int version()

与此 UUID 关联的版本号。 版本号描述了这个 UUID 是如何生成的。 版本号的含义如下:

  • 1 基于时间的 UUID
  • 2 DCE 安全 UUID
  • 3 基于名称的 UUID
  • 4 随机生成的UUID

返回:

此 UUID 的版本号

variant

public int variant()

与此 UUID 关联的变体编号。 变体编号描述了 UUID 的布局。 变体编号具有以下含义:

  • 0 为 NCS 向后兼容保留
  • 2 IETF RFC 4122 (Leach-Salz),被这个类使用
  • 6 保留,Microsoft Corporation 向后兼容
  • 7 保留供将来定义

返回:

此 UUID 的变体编号

timestamp

public long timestamp()

与此 UUID 关联的时间戳值。

60 位时间戳值由该 UUID 的 time_low、time_mid 和 time_hi 字段构成。 生成的时间戳从 UTC 1582 年 10 月 15 日午夜开始以 100 纳秒为单位进行测量。

时间戳值仅在基于时间的 UUID 中有意义,其版本类型为 1。如果此 UUID 不是基于时间的 UUID,则此方法将引发 UnsupportedOperationException。

返回:

此 UUID 的时间戳。

Throws:

Throw名称 Throw描述
UnsupportedOperationException 如果此 UUID 不是版本 1 UUID

clockSequence

public int clockSequence()

与此 UUID 关联的时钟序列值。

14 位时钟序列值由该 UUID 的时钟序列字段构成。 时钟序列字段用于保证基于时间的 UUID 中的时间唯一性。

clockSequence 值仅在基于时间的 UUID 中有意义,其版本类型为 1。如果此 UUID 不是基于时间的 UUID,则此方法将引发 UnsupportedOperationException。

返回:

此 UUID 的时钟序列

Throws:

Throw名称 Throw描述
UnsupportedOperationException 如果此 UUID 不是版本 1 UUID

node

public long node()

与此 UUID 关联的节点值。

48 位节点值是根据此 UUID 的节点字段构造的。 此字段旨在保存生成此 UUID 的机器的 IEEE 802 地址,以保证空间唯一性。

节点值仅在基于时间的 UUID 中有意义,其版本类型为 1。如果此 UUID 不是基于时间的 UUID,则此方法将引发 UnsupportedOperationException。

返回:

此 UUID 的节点值

Throws:

Throw名称 Throw描述
UnsupportedOperationException 如果此 UUID 不是版本 1 UUID

toString

public String toString()

返回表示此 UUID 的 String 对象。

UUID 字符串表示如下 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"

覆盖:

类 Object 中的 toString

返回:

此 UUID 的字符串表示形式

hashCode

public int hashCode()

返回此 UUID 的哈希码。

覆盖:

类 Object 中的 hashCode

返回:

此 UUID 的哈希码值

equals

public boolean equals(Object obj)

将此对象与指定对象进行比较。 当且仅当参数不为 null、是 UUID 对象、具有相同的变体并且包含与此 UUID 逐位相同的值时,结果才为 true。

覆盖:

类 Object 中的等于

参数:

参数名称 参数名称
obj 比较对象

返回:

如果对象相同,则为 true; 否则为 false

compareTo

public int compareTo(UUID val)

将此 UUID 与指定的 UUID 进行比较。

如果 UUID 不同的最重要字段对于第一个 UUID 更大,则两个 UUID 中的第一个大于第二个。

指定者:

接口 ComparableUUID 中的 compareTo

参数:

参数名称 参数描述
val 此 UUID 要与之比较的 UUID

返回:

-1、0 或 1,因为此 UUID 小于、等于或大于 val