本文概述
- 什么是UUID?
- Java UUID用法
- UUID变体
- Java UUID构造函数
- UUID类的方法
Java UUID类
- UUID是代表不可变的通用唯一标识符(UUID)的类。
- UUID表示一个128位长的值, 对于所有实际用途而言都是唯一的。它用于识别计算机系统中的信息。
- UUID类属于java.util包。
- UUID类实现Serializable和Comparable接口, 并扩展Object类。
- 这些全局标识符存在许多变体。
- UUID类的方法用于操纵Leach-Salz变体。
UUID的表示使用十六进制数字。
237e9877-e79b-12d4-a765-321741963000
Java UUID由十六进制数字和四个连字符(-)组成。它是36个字符长的唯一数字, 包括四个连字符。 UUID可以为nil, 其中所有位均设置为零。
文章图片
Name | Length (Hex Digits) | Length (bytes) | 内容 |
---|---|---|---|
time_low | 8 | 4 | 时间的低32位 |
time_mid | 4 | 2 | 时间的中间16位 |
time_hi and_version | 4 | 2 | MSB中的4位版本, 后面是时间的高12位 |
clock_seq_hi_and_res clock_seq_low | 4 | 2 | 最高有效位为1-3位, 随后为13-15位时钟序列 |
node | 12 | 6 | 48位节点ID |
- Web应用程序的会话ID
- 交易编号
- 随机文件名
- 数据库表的主键
- 0xFFFFFFFF00000000(表示time_low)
- 0X0000000FFFF0000(表示time_mid)
- 0x0000000000000FF(表示time_hi)
- 0x00000000000F000(版本)
UUID的类型
有四种类型的UUID:
- 基于时间的UUID(版本1)
- DCE安全性UUID(版本2)
- 基于名称的UUID(版本3和5)
- 随机生成的UUID(版本4)
【Java UUID介绍和用法】UUID版本3和5使用名称空间和名称的哈希值生成UUID。名称空间标识符是UUID, 例如域名系统(DNS), URL和OID(对象标识符)等。UUID版本3和UUID版本5之间的区别在于哈希算法。
版本3使用MD5(128位)算法, 而版本5使用SHA-1(160位)算法。我们将结果哈希值修整为128位, 然后将版本替换为4位, 将变体替换为2位。 Java不提供版本5的实现。
版本4
UUID版本4的实现使用随机数作为源。它使用不可预测的值作为种子来生成随机数以减少冲突的机会。
UUID变体 最常用的变体是2(Leach-Salz)。有以下几种类型的变体:
- 0:保留用于NCS向后兼容
- 2:浸盐
- 6:保留用于Microsoft向后兼容
- 7:保留以供将来定义。
文章图片
在上图中, “ V”表示UUID版本, “ R”(1-3)表示UUID变体。
Java UUID构造函数 我们可以使用构造函数生成不同类型的UUID。构造函数的语法为:
UUID = new UUID (long mostSigBits, long leastSigBits);
参数mostSigBits用于UUID的MSB(64位), 而minimumSigBits变为UUID的LSB(64位)。
UUID类的方法 UUID ramdomUUID()方法
randomUUID()方法随机生成UUID。每当我们运行该程序时, 它都会生成一个新的UUID。该方法的签名是:
public static UUID randomUUID()
该方法返回随机生成的UUID。
例
以下示例生成一个随机UUID。
import java.util.UUID;
public class UUIDExample
{
public static void main(String[] args)
{
UUID uuid=UUID.randomUUID();
//Generates random UUID
System.out.println(uuid);
}
}
输出量
c6a8669e-ee95-4c42-9ef6-4a9b61380164
UUID version()方法
与此UUID关联的版本。版本号描述了此UUID的生成方式。该方法返回UUID的版本号。该方法的签名是:
public int version()
例
import java.util.UUID;
class UUIDVersionExample
{
public static void main(String arg[]) throws
UnsupportedOperationException
{
//returns a UUID with specified value
UUID uuid=UUID.fromString("c81d4e2e-bcf2-11e6-869b-7df92533d2db");
UUID uuid1=UUID.fromString("5289df73-7df5-3326-bcdd-22597afb1fac");
System.out.println("UUID version is: "+uuid.version());
//invoking version method
System.out.println("UUID version is: "+uuid1.version());
}
}
输出量
UUID version is: 1
UUID version is: 3
UUID variant()方法
与此UUID关联的变体编号。它描述了UUID的布局。该方法返回UUID的变体编号。该方法的签名是:
public int variant()
例
import java.util.UUID;
class UUIDvariantExample
{
public static void main(String arg[]) throws UnsupportedOperationException
{
UUID uuid=UUID.fromString("c81d4e2e-bcf2-11e6-869b-7df92533d2db");
UUID uuid1=UUID.fromString("5289df73-7df5-3326-fcdd-22597afb1fac");
System.out.println("UUID variant is: "+uuid.variant());
//returns variant number
System.out.println("UUID variant is: "+uuid1.variant());
}
}
输出量
UUID variant is: 2
UUID variant is: 7
UUID node()方法
node()方法返回与UUID关联的节点值。它是一个48位的节点值。它是根据此UUID的字段构造的。它保存机器的IEEE 802地址(MAC地址)。如果UUID不是版本1 UUID, 则抛出UnsupportedOperationException。
该方法的签名是:
public long node()
例
import java.util.UUID;
class UUIDnodeExample
{
public static void main(String arg[])
{
//returns a UUID with specified value
UUID uuid = UUID.fromString("237e9877-e79b-12d4-a765-321741963000");
System.out.println("Node value: "+ uuid.node());
//returns node value
}
}
输出量
Node value: 55075465998336
推荐阅读
- Java与JavaScript的对比
- 什么是JRE()
- 什么是Java ME()
- Java main()方法
- Java密钥库keystore
- Jetpack|MAD,现代安卓开发技术(Android 领域开发方式的重大变革~)
- WinXP如何完全释放网速?释放网速的办法
- WinXP电脑无缘无故关机的处理办法
- WinXP系统驱动程序Nvcpl出错怎样办?