使用java.util.UUID生成唯一标识,为什么生成唯一标识的方法有些还需要参数?
比如UUID.nameUUIDFromBytes(byte[]name)需要提供参数来生成唯一标识,用不带参数的UUID.randomUUID()方法也能生成唯一标识,还...
比如UUID.nameUUIDFromBytes(byte[] name) 需要提供参数来生成唯一标识,
用不带参数的UUID.randomUUID() 方法也能生成唯一标识,还为什么需要有参数的方法呢? 展开
用不带参数的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);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询