Java UUID生成器– Java GUID
时间:2020-02-23 14:34:35 来源:igfitidea点击:
Java UUID
Java UUID(通用唯一标识符)类是java.util包的一部分。
Java UUID类表示一个不变的通用唯一标识符,并表示128位值。
也称为GUID(全局唯一标识符)。
Java UUID用法
Java UUID用于创建以下内容:
- 随机文件名
- Java Web应用程序的会话ID
- 数据库表的主键
- 交易编号
Java UUID构造函数
public UUID(long mostSigBits, long leastSigBits)
使用指定的数据创建新的UUID。
UUID版本和变体
UUID有不同的变体,但是在大多数示例中,我们将看到变体2(Leach-Salz)。
UUID变体:
- 0 –保留用于NCS向后兼容
- 2 – Leach-Salz
- 6 –保留,Microsoft Corporation向后兼容
- 7 –保留以供将来定义
UUID版本:
- 基于时间的(版本1)
- DCE安全性(版本2)
- 基于名称(版本3)
- 随机生成的UUID(版本4)
Java UUID生成器
我们可以使用java-uuid-generator的Maven依赖来生成UUID。
您可以使用下面的maven依赖项将其包括在内。
<dependency> <groupId>com.fasterxml.uuid</groupId> <artifactId>java-uuid-generator</artifactId> <version>3.1.4</version> </dependency>
让我们看一下下面的java uuid generator示例程序。
package com.theitroad.examples;
import java.util.UUID;
import com.fasterxml.uuid.Generators;
/**
* Java UUID Generator
*
*/
public class UUIDVersionExample {
public static void main(String[] args) {
//Generate time-based UUID
UUID uuid1 = Generators.timeBasedGenerator().generate();
System.out.println("UUID : "+uuid1);
System.out.println("UUID Version : "+uuid1.version());
System.out.println("UUID Variant : "+uuid1.variant());
//Generate random UUID
UUID uuid2 = Generators.randomBasedGenerator().generate();
System.out.println("UUID : "+uuid2);
System.out.println("UUID Version : "+uuid2.version());
System.out.println("UUID Variant : "+uuid2.variant());
}
}
上面的uuid生成器程序的输出如下:
UUID : 5fc03087-d265-11e7-b8c6-83e29cd24f4c UUID Version : 1 UUID Variant : 2 UUID : e8e3db08-dc39-48ea-a3db-08dc3958eafb UUID Version : 4 UUID Variant : 2
Java UUID方法
让我们看一下下面的带有示例程序的UUID方法。
randomUUID():这是一种静态工厂方法,用于获取类型4随机UUID。
package com.theitroad.examples;
import java.util.UUID;
/**
* Java UUID randomUUID Example
*
*/
public class UUIDExample {
public static void main(String[] args) {
//initialize uuid
UUID uuid = UUID.randomUUID();
System.out.println(uuid);
}
}
上面程序的输出如下:
84cff9ea-de0f-4841-8645-58620adf49b2
- fromString(String name):此方法从指定的字符串创建UUID当您必须将字符串转换为UUID对象时,这很有用。
package com.theitroad.examples;
import java.util.UUID;
/**
* Java UUID fromString Example
*
*/
public class UUIDExample {
public static void main(String[] args) {
//initialize uuid
UUID uuid = UUID.fromString("84cff9ea-de0f-4841-8645-58620adf49b2");
System.out.println(uuid);
}
}
- clockSequence():此方法返回与UUID关联的时钟序列,并且要获取时钟序列,我们需要创建基于时间的(版本1)UUID,否则将抛出UnsupportedOperationException。
package com.theitroad.examples;
import java.util.UUID;
import com.fasterxml.uuid.Generators;
/**
* Java UUID Clock Sequence Program
*
*/
public class UUIDClockSequenceExample {
public static void main(String[] args) {
//Generate time-based UUID
UUID uuid = Generators.timeBasedGenerator().generate();
System.out.println("UUID : " + uuid);
System.out.println("UUID Clock Sequence : "+uuid.clockSequence());
}
}
上面程序的输出如下:
UUID : 52334bd0-d266-11e7-a11d-0148035fb8f1 UUID Clock Sequence : 8477
getLeastSignificantBits():此方法返回UUID的最低有效64位。
getMostSignificantBits():此方法返回UUID的最高有效64位。
package com.theitroad.examples;
import java.util.UUID;
/**
* Java UUID Least and Most Significant Bits Example Program
*
*/
public class UUIDLsbMsbExample {
public static void main(String[] args) {
//initialize uuid
UUID uuid = UUID.randomUUID();
System.out.println("UUID : "+uuid);
System.out.println("Least Significant Bits : "+uuid.getLeastSignificantBits());
System.out.println("Most Significant Bits : "+uuid.getMostSignificantBits());
}
}
上面的Java UUID示例程序的输出是:
UUID : 5b08be16-2cb6-46d5-bf98-7d7d750df0ca Least Significant Bits : -4640821438217064246 Most Significant Bits : 6559701859713828565
- nameUUIDFromBytes(byte [] name):这是一个静态工厂方法,用于使用指定的字节数组来获取基于名称的(版本3)UUID。
package com.theitroad.examples;
import java.util.UUID;
/**
* Java UUID From Byte Array Example Program
*
*/
public class UUIDFromBytesExample {
public static void main(String[] args) {
//initialize byte array
byte[] bs = {1, 2, 3};
//initialize uuid using byte array
UUID uuid = UUID.nameUUIDFromBytes(bs);
System.out.println("UUID : "+uuid);
System.out.println("UUID Version : "+uuid.version());
}
}
上面程序的输出是:
UUID : 5289df73-7df5-3326-bcdd-22597afb1fac UUID Version : 3
node():此方法从UUID返回节点的长值,并且要获取节点值,我们需要创建基于时间的(版本1)UUID,否则将抛出UnsupportedOperationException。
package com.theitroad.examples;
import java.util.UUID;
import com.fasterxml.uuid.Generators;
/**
* Java UUID Node Example Program
*
*/
public class UUIDNodeExample {
public static void main(String[] args) {
//Generate time-based uuid
UUID uuid = Generators.timeBasedGenerator().generate();
System.out.println("UUID : "+uuid);
System.out.println("UUID Version : "+uuid.version());
System.out.println("UUID Node : "+uuid.node());
}
}
UUID : 2e15baa3-d272-11e7-a479-05de8af2b6bd UUID Version : 1 UUID Node : 6453372040893
- timestamp():此方法返回UUID UUID的时间戳值,并获取时间戳值,我们需要创建基于时间的(版本1)UUID,否则它将抛出UnsupportedOperationException。
package com.theitroad.examples;
import java.util.UUID;
import com.fasterxml.uuid.Generators;
/**
* Java UUID timestamp Example Program
*
*/
public class UUIDTimestampExample {
public static void main(String[] args) {
//Generate time-based uuid
UUID uuid = Generators.timeBasedGenerator().generate();
System.out.println("UUID : " + uuid);
System.out.println("UUID Version : " + uuid.version());
System.out.println("UUID Timestamp : " + uuid.timestamp());
}
}
上面程序的输出是:
UUID : 61614667-d279-11e7-a5ac-f941ac8dfc39 UUID Version : 1 UUID Timestamp : 137309732424730215
使用构造函数创建UUID
让我们看下面的示例程序,以使用其构造函数创建UUID。
package com.theitroad.examples;
import java.util.UUID;
/**
* Java UUID Using Constructor Example Program
*
*/
public class UUIDUsingConstructor {
public static void main(String[] args) {
long msb = System.currentTimeMillis();
long lsb = System.currentTimeMillis();
//initialize uuid
UUID uuid = new UUID(msb, lsb);
System.out.println("UUID : "+uuid);
}
}
比较两个UUID
Java UUID类提供了两种比较UUID的方法。
compareTo(UUID val):UUID类实现Comparable接口。
此方法将UUID与UUID的指定值进行比较,并返回可以为-1、0或者1的整数值。-1:此UUID小于UUID的指定值
0:此UUID等于UUID的指定值
1:该UUID大于UUID的指定值
让我们看下面的示例程序。
package com.theitroad.examples;
import java.util.UUID;
/**
* Java UUID compareTo Example Program
*
*/
public class UUIDCompareToExample {
public static void main(String[] args) {
//initialize uuids
UUID uuid1 = UUID.randomUUID();
UUID uuid2 = UUID.randomUUID();
int result = uuid1.compareTo(uuid2);
if (result == -1) {
System.out.println("UUID1 is less than UUID2");
}else if (result == 0) {
System.out.println("Both are Equal UUID");
}else if (result == 1) {
System.out.println("UUID1 is greater than UUID2");
}
}
}
输出将取决于随机生成的UUID值,我们无法预测。
- equals(Object obj):此方法将UUID与指定的对象进行比较,如果指定的对象不为null,类型为UUID,具有相同的变体且包含相同的值,则返回true。
package com.theitroad.examples;
import java.util.UUID;
/**
* Java UUID equals Example Program
*
*/
public class UUIDEqualsExample {
public static void main(String[] args) {
//initialize uuids
UUID uuid1 = UUID.randomUUID();
UUID uuid2 = UUID.randomUUID();
System.out.println(uuid1.equals(uuid2));
}
}

