UUID解析

来源:互联网 发布:java中的引用类型 编辑:程序博客网 时间:2024/06/07 14:08

今天第一次写博客,有不足的地方,还望大家指出,谢谢。

UUID作为 UUID含义是通用唯一识别码 (Universally Unique Identifier),这是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF);

接下来看源码

    private final long mostSigBits; // 高字节private final long leastSigBits; // 低字节private static class Holder { // 内部类static final SecureRandom numberGenerator = new SecureRandom(); // 加密的强随机数生成器 }private UUID(byte[] data) {         long msb = 0;        long lsb = 0;        assert data.length == 16 : "data must be 16 bytes in length";         for (int i=0; i<8; i++)            msb = (msb << 8) | (data[i] & 0xff); // 使前八个字节依次向前移动8位,得到高字节        for (int i=8; i<16; i++)            lsb = (lsb << 8) | (data[i] & 0xff); // 使后八个字节依次向前移动8位,得到低字节        this.mostSigBits = msb;        this.leastSigBits = lsb;            } public static UUID randomUUID() {         SecureRandom ng = Holder.numberGenerator;        byte[] randomBytes = new byte[16];                ng.nextBytes(randomBytes); // 为16位字节数组随机生成数值                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 String toString() {        return (digits(mostSigBits >> 32, 8) + "-" +                digits(mostSigBits >> 16, 4) + "-" +                digits(mostSigBits, 4) + "-" +                digits(leastSigBits >> 48, 4) + "-" +                digits(leastSigBits, 12));    }    /** Returns val represented by the specified number of hex digits. */    private static String digits(long val, int digits) {        long hi = 1L << (digits * 4);        return Long.toHexString(hi | (val & (hi - 1))).substring(1);    }


原创粉丝点击