Java UUID

介绍:

UUID(通用唯一标识符)表示一个128位长的唯一值 。 它也被普遍称为GUID(全球唯一标识符)。

UUID的标准表示形式由十六进制数字组成:

533a4559-e55c-18b3-8456-555563322002

并具有36个字符 ,其中包括四个连字符'-'

Java 中的java.util.UUID类表示一个不变的UUID。

我们可以使用UUID类来生成随机文件名,会话或事务ID。 UUID的另一种流行用法是在数据库中生成主键值。

Java UUID类具有一种用于处理Leach-Salz变体(变体2)的方法 。 但是,其构造函数允许生成任何类型的UUID

new UUID(long mostSigBits, long leastSigBits)

变体确定UUID的布局。 让我们来一个样本UUID

533a4559-e55c-18b3-8456-555563322002
xxxxxxxx-xxxx-Bxxx-Axxx-xxxxxxxxxxxx

此处, A的值表示变量,并由其前三个MSB(最高有效位)确定:

MSB1 MSB2 MSB3 变体 变体说明
0 X X 0 保留用于NCS向后兼容
1个 0 X 2 里奇-萨尔茨
1个 1个 0 6 保留,Microsoft Corporation向后兼容
1个 1个 7 保留以供将来定义

对于我们而言, A = 8(1000) ,因此前三个MSB100 。 这意味着我们的UUID具有2的变体。

对于版本2 UUID ,有五个不同的版本:

描述
v1 基于时间的
v2 DCE-安全
v3和v5 基于名称
v4 随机生成的UUID

生成

让我们介绍一下Java UUID类中的方法,这些方法可用于生成UUID

1.

使用加密强度高的伪随机数生成器生成v4伪随机UUID

UUID uuid = UUID.randomUUID();

2.

我们可以使用nameUUIDFromBytes()从字节数组生成UUID

byte[] byteArr = {11, 23, 33}; 
UUID uuid = UUID.nameUUIDFromBytes(byteArr);

此方法生成v3 UUID (基于名称)。

3.

使用fromString() ,我们可以从标准字符串表示形式创建UUID

UUID uuid = UUID.fromString("533a4559-e55c-18b3-2456-555563322002");

对于作为参数传入的任何无效字符串,它将引发IllegalArgumentException

比较两个

Java UUID类实现Comparable接口。 因此,我们可以使用compareTo()方法进行比较:

UUID uuid1 = UUID.randomUUID();
UUID uuid2 = UUID.randomUUID();
 
int result = uuid1.compareTo(uuid2);

众所周知, compareTo()方法返回:

  • 1:如果uuid1大于uuid2
  • 0:如果uuid1 = uuid2
  • -1:如果uuid1小于uuid2

我们也可以选择使用equals()方法进行比较。

其他方法:

让我们介绍一下Java UUID类的其他一些方法:

1.

顾名思义, getLeastSignificantBits()getMostSignificantBits()分别返回64个最低有效位和64个最高有效位

UUID uuid = UUID.randomUUID();
 
long leastSignificantBits = uuid.getLeastSignificantBits();
long mostSignificantBits = uuid.getMostSignificantBits();

这两种方法都返回一个long值。

2.

我们还可以查询UUID的变体和版本

UUID uuid = UUID.randomUUID();
 
int variant = uuid.variant();
int version = uuid.version();

使用基于时间的

让我们从在POM中java- uuid -generator添加一个依赖关系开始:

<dependency>
    <groupId>com.fasterxml.uuid</groupId>
    <artifactId>java-uuid-generator</artifactId>
    <version>3.1.5</version>
</dependency>

请注意,该库提供了各种类型的UUID生成器。

要创建基于时间的UUID ,我们将具有:

UUID uuid = Generators.timeBasedGenerator().generate();

处理v1 UUID时,方便使用的java.util包中的其他方法包括:

1. timestamp(): 返回与给定的v1 UUID关联的时间戳值 。 与任何其他类型的UUID一起使用时,此方法将引发UnsupportedOperationException

2. clockSequence(): 它返回一个14位值,该值是根据给定UUID的时钟序列字段构造的 。 它还会为v1类型以外的UUID抛出UnsupportedOperationException

结论:

在本教程中,我们了解了什么是UUID及其变体。 我们讨论了变量类型2的不同可用版本。 我们还介绍了Java UUID类公开的许多方法。

翻译自: https://www.javacodegeeks.com/2019/03/java-uuid.html

### JavaUUID 的用法 #### 创建 UUID 对象 在 Java 中,`java.util.UUID` 类提供了多种方法来创建唯一标识符。一种常见的做法是通过 `new UUID(long mostSigBits, long leastSigBits)` 构造函数创建自定义的 UUID 实例[^1]。 ```java package com.journaldev.examples; import java.util.UUID; public class UUIDUsingConstructor { public static void main(String[] args) { long msb = System.currentTimeMillis(); long lsb = System.currentTimeMillis(); // 使用构造器初始化 uuid UUID uuid = new UUID(msb, lsb); System.out.println("UUID : " + uuid); } } ``` 这种方法允许开发者手动指定最高有效位 (`mostSigBits`) 和最低有效位 (`leastSigBits`) 来构建特定模式下的 UUID。然而,在实际应用中更推荐使用静态工厂方法来自动生成全局唯一的 UUID 值[^2]。 #### 自动生成 UUID 为了简化开发过程并确保更好的安全性与唯一性,可以利用 `UUID.randomUUID()` 方法生成基于伪随机数的新实例: ```java // 自动获取一个新的随机UUID对象 UUID randomUUID = UUID.randomUUID(); System.out.println("Randomly generated UUID: " + randomUUID); ``` 此方式能够提供更高的熵值从而减少冲突概率,并且不需要显式设置高低位数值[^3]。 #### 比较两个 UUID 当需要判断两个 UUID 是否相等时可以直接调用其内置的方法来进行比较操作: ```java boolean isEqualToAnotherUuid = firstUUID.equals(secondUUID); if(isEqualToAnotherUuid){ System.out.println("这两个UUID是一样的"); }else{ System.out.println("这两个UUID不一样"); } ``` 上述代码片段展示了如何使用 `.equals(Object obj)` 函数完成两者的对比工作。如果希望进一步探究它们之间的差异,则可以通过访问各自的部分属性如版本号、变体等来做更加细致化的分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值