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

	}

}