Java唯一号码生成器--UUID或GUID与实例

803 阅读4分钟

在这篇博文中,我们将学习java唯一号码生成器--UUID或GUID的例子。

通用唯一标识符是一个独特的字符串,在软件应用中代表信息。

有两种类型的唯一标识符:

  • UUID - 普遍唯一的标识符。

  • GUID 全球唯一标识符。

    UUID和GUID之间的区别,都是返回126位。

GUID是微软对UUID功能的实现。两者都产生16个字节的十六进制,用连字符分四组分开。

UUIDGUID可以在以下情况下实时使用

  • 用于表示数据库表中的一个主键
  • 可作为网络应用中的会话ID,企业应用中的交易ID。
  • 也可以作为REST API应用中进行CRUD操作的唯一标识符。
  • 代表识别分布在多个服务器上的大数据。
  • 命名用于存储和检索文件的静态资源。

Java提供了java.util.UUID类,用于在java中提供UUID实现。

java.util.UUID类

这个类被指定为不可变的普遍唯一标识符(UUID)。 这个类有以下说明

  • 生成128位或16位的字节,包含十六进制的值
  • 实现了Serializable、Comparable接口
  • 扩展了Object类。

有多种创建UUID的变体。它有操作Leach-Salz变体的方法。

然而,我们可以使用构造函数创建多个变体。

构造函数

UUID(long mostSigBits, long leastSigBits)  

它只有一个构造函数,需要两个参数来创建一个新的UUIDmostSigBits- UUID的最重要的64位
leastSigBits - UUID的最不重要的64位

UUID有四种类型的版本

  • 版本1代表基于时间的--UUID V1
  • 版本2代表DCE安全--UUID V2
  • 第3版代表基于名字的--UUID V3
  • 第4版代表随机生成的--UUID V4

例子

下面的例子在java中生成了UUID V4字符串

import java.util.UUID;  
  
public class UUIDDemo {  
  
 public static void main(String[] args) {  
    
  UUID uuid = UUID.randomUUID();  
  String uuidString = uuid.toString();  
  System.out.println(uuid.variant());  // 2  
  System.out.println(uuid.version());  // 4  
  System.out.println(uuidString);  //3d795ac3-2cea-4ed2-92d8-3d71a2539cf2  
  
 }  
}  

java-uuid-generator maven

在maven应用程序中,java-uuid-generator是com.fastxml.uuid的一个依赖项。这是一个用于生成所有版本UUID的java库。

  
    com.fasterxml.uuid  
    java-uuid-generator  
    3.1.5  
  

下面的例子生成了以下内容

  • 使用时间基生成器生成 UUID V1
  • UUID V3 使用UUID.nameUUIDFromBytes方法以及基于名称生成UUID。
  • UUID V4使用随机生成器(randomBasedGenerator)生成
  • 使用SHA消化器生成UUID V5
import java.util.UUID;  
  
import com.fasterxml.uuid.Generators;  
  
public class HelloWorld {  
 public static void main(String[] args) {  
  // UUID V1 generation  
  UUID v1 = Generators.timeBasedGenerator().generate();  
  System.out.println("UUID V1 value: " + v1.toString());  
  System.out.println("version  : " + v1.version());  
  System.out.println("variant  : " + v1.variant());  
  // UUID V3 generation  
  //  create byte array and initialize it  
  byte[] byteArray = { 0, 1, 4 };  
  // Create uuid from byte array  
  UUID v3 = UUID.nameUUIDFromBytes(byteArray);  
  System.out.println("UUID V4 value: " + v3.toString());  
  System.out.println("version  : " + v3.version());  
  System.out.println("variant  : " + v3.variant());  
  // UUID V4 generation  
  UUID v4 = Generators.randomBasedGenerator().generate();  
  System.out.println("UUID V4 value: " + v4.toString());  
  System.out.println("version  : " + v4.version());  
  System.out.println("variant  : " + v4.variant());  
  
  // UUID V5 generation  
  UUID v5 = Generators.nameBasedGenerator().generate("cloudhadoop.com");  
  System.out.println("UUID V5 value: " + v5.toString());  
  System.out.println("version  : " + v5.version());  
  System.out.println("variant  : " + v5.variant());  
  
  
 }  
}  

上述程序代码的输出是

UUID V1 value: 04272c28-e69d-11e8-be73-df7930994371  
version  : 1  
variant  : 2  
UUID V4 value: be489ef3-af30-3d20-b50a-5c504ecc5294  
version  : 3  
variant  : 2  
UUID V4 value: 1c4e3ff8-bf58-4081-8e3f-f8bf58908109  
version  : 4  
variant  : 2  
UUID V5 value: cdecd331-e6c2-5e7f-ad1d-3ee766052560  
version  : 5  
variant  : 2  

如何从一个字符串创建UUID

UUID类提供了fromString()方法,可以从一个给定的字符串生成UUID。这是一个将字符串转换为UUID的例子。这个方法在线程 "main "中抛出了异常 java.lang.IllegalArgumentException。无效的UUID字符串。 150e064ff8d6,如果字符串的长度不是16个字节。

  
import java.util.UUID;  
  
public class fromStringExample {  
  
 public static void main(String[] args) {  
  
  UUID uuid = UUID.fromString("d4578015-0e06-4ff8-9780-150e064ff8d6");  
  System.out.println("UUID  value: " + uuid.toString());  
  System.out.println("version  : " + uuid.version());  
  System.out.println("variant  : " + uuid.variant());  
 }  
  
}  

上述代码的输出是

UUID  value: d4578015-0e06-4ff8-9780-150e064ff8d6  
version  : 4  
variant  : 2  
UUID class methods  

UUID类方法

以下方法在java.util.Util类中可用

  • clockSequence- 这个方法返回给定UUID的时钟序列。它在线程 "main "中抛出Exception java.lang.UnsupportedOperationException。如果它不是基于时间的UUID版本,则不是基于时间的UUID。
  • getLeastSignificantBits- 该方法返回给定UUID的最低有效64位。
  • getMostSignificantBits()- 该方法返回给定UUID的最重要的64位。
  • nameUUIDFromBytes(bytearray)- 该方法返回指定字节数组的UUID V3。
  • node()- 该方法返回给定UUID的节点值
  • timestamp()- 该方法返回给定UUID的时间戳。
  • randomUUID - 这个静态方法产生随机UUID。

其他UUID库

有各种UUID库可用于java语言

  • UUID
  • apache common io库