使用java.util.UUID生成唯一标识,为啥生成唯一标识的方法有些还需要参数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用java.util.UUID生成唯一标识,为啥生成唯一标识的方法有些还需要参数?相关的知识,希望对你有一定的参考价值。

比如UUID.nameUUIDFromBytes(byte[] name) 需要提供参数来生成唯一标识,
用不带参数的UUID.randomUUID() 方法也能生成唯一标识,还为什么需要有参数的方法呢?

//先看不加参数的源码
public static UUID randomUUID() 
        SecureRandom ng = Holder.numberGenerator;

        byte[] randomBytes = new byte[16];
        ng.nextBytes(randomBytes);
        randomBytes[6]  &= 0x0f;  /* clear version        */
        randomBytes[6]  |= 0x40;  /* set to version 4     */
        randomBytes[8]  &= 0x3f;  /* clear variant        */
        randomBytes[8]  |= 0x80;  /* set to IETF variant  */
        return new UUID(randomBytes);//看到这里没,其实也是调用的带参数的,只不过
        //所带参数的是给你随机出来的
    
    
    //再看带参数的
     public static UUID nameUUIDFromBytes(byte[] name) 
        MessageDigest md;
        try 
            md = MessageDigest.getInstance("MD5");
         catch (NoSuchAlgorithmException nsae) 
            throw new InternalError("MD5 not supported");
        
        byte[] md5Bytes = md.digest(name);//这里就是对给的byte[]参数进行md5运算之后再进行计算UUID
        md5Bytes[6]  &= 0x0f;  /* clear version        */
        md5Bytes[6]  |= 0x30;  /* set to version 3     */
        md5Bytes[8]  &= 0x3f;  /* clear variant        */
        md5Bytes[8]  |= 0x80;  /* set to IETF variant  */
        return new UUID(md5Bytes);
    

参考技术A api,,,,,, 参考技术B 一个是随机的,一个不是本回答被提问者采纳

什么是UUID,Java中怎么产生UUID

UUID: 通用唯一识别码 (Universally Unique Identifier),是根据时间,机器码,网络地址生成的全球唯一数。
引入 java.util.UUID,直接调用以下即可得到一个32为的随机数,即UUID.
UUID uuid = UUID.randomUUID();
参考技术A GUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成GUID。从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复。 

    UUID是1.5中新增的一个类,在java.util下,用它可以产生一个号称全球唯一的ID。
    
import java.util.UUID;
   public class Test 
      public static void main(String[] args) 
        UUID uuid = UUID.randomUUID(); 
        System.out.println (uuid);
      
   

以上是关于使用java.util.UUID生成唯一标识,为啥生成唯一标识的方法有些还需要参数?的主要内容,如果未能解决你的问题,请参考以下文章

Java生成唯一ID

java.util.UUID.randomUUID().toString() 长度

什么是UUID,Java中怎么产生UUID

Java中唯一数的生成

Java中唯一数的生成

JMeter生成UUID方式