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

比如UUID.nameUUIDFromBytes(byte[]name)需要提供参数来生成唯一标识,用不带参数的UUID.randomUUID()方法也能生成唯一标识,还... 比如UUID.nameUUIDFromBytes(byte[] name) 需要提供参数来生成唯一标识,
用不带参数的UUID.randomUUID() 方法也能生成唯一标识,还为什么需要有参数的方法呢?
展开
 我来答
非鱼共享
推荐于2018-03-12 · 专注互联网技术,快速了解互联网研发
非鱼共享
采纳数:204 获赞数:695

向TA提问 私信TA
展开全部
//先看不加参数的源码
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);
    }
xia_wu_
2014-09-22
知道答主
回答量:69
采纳率:0%
帮助的人:16.2万
展开全部
api,,,,,,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友12ee0fd
2014-09-22 · TA获得超过4.7万个赞
知道大有可为答主
回答量:1.1万
采纳率:66%
帮助的人:1982万
展开全部
一个是随机的,一个不是
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式