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)); } }