记录uuid学习内容
1.最常用uuid生成:UUID uuid = UUID.randomUUID();
2.JDK源码中的src.zip
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); }
我们从上面看到源码实现关于时间戳,MAC地址等,那就有疑问,网上所说的UUID是是由这几部分构成的,有点冲突。
其实上面源码中的set to version 4 中可以看到,这是版本4,UUID的生成原理和版本有关。关于不同版本的UUID生成规则这里不叙述。
测试例子:
UUID uuid = UUID.randomUUID(); System.out.println("version = " + uuid.version()); System.out.println("timestamp= " + uuid.timestamp());
测试结果是:
version = 4
错误信息:Not a time-based UUID
生成的UUID拿不到时间戳,说明并不是由时间戳生成的。
但是如何选择版本,还未探索到,猜测可能和JDK版本有关