在这篇博文中,我们将学习java唯一号码生成器--UUID或GUID的例子。
通用唯一标识符是一个独特的字符串,在软件应用中代表信息。
有两种类型的唯一标识符:
-
UUID - 普遍唯一的标识符。
-
GUID 全球唯一标识符。
UUID和GUID之间的区别,都是返回126位。
GUID是微软对UUID功能的实现。两者都产生16个字节的十六进制,用连字符分四组分开。
UUID或GUID可以在以下情况下实时使用
- 用于表示数据库表中的一个主键
- 可作为网络应用中的会话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库