()
| 40 | } |
| 41 | |
| 42 | private static UUID rndUUIDv4() { |
| 43 | // ~ return UUID.randomUUID() : |
| 44 | final Random random = threadRandom.get(); |
| 45 | |
| 46 | final byte[] uuid = new byte[16]; |
| 47 | random.nextBytes(uuid); |
| 48 | uuid[6] &= 0x0f; /* clear version */ |
| 49 | uuid[6] |= 0x40; /* set to version 4 */ |
| 50 | uuid[8] &= 0x3f; /* clear variant */ |
| 51 | uuid[8] |= 0x80; /* set to IETF variant */ |
| 52 | |
| 53 | long msb = 0; |
| 54 | msb = (msb << 8) | (uuid[0] & 0xff); |
| 55 | msb = (msb << 8) | (uuid[1] & 0xff); |
| 56 | msb = (msb << 8) | (uuid[2] & 0xff); |
| 57 | msb = (msb << 8) | (uuid[3] & 0xff); |
| 58 | msb = (msb << 8) | (uuid[4] & 0xff); |
| 59 | msb = (msb << 8) | (uuid[5] & 0xff); |
| 60 | msb = (msb << 8) | (uuid[6] & 0xff); |
| 61 | msb = (msb << 8) | (uuid[7] & 0xff); |
| 62 | |
| 63 | long lsb = 0; |
| 64 | lsb = (lsb << 8) | (uuid[8] & 0xff); |
| 65 | lsb = (lsb << 8) | (uuid[9] & 0xff); |
| 66 | lsb = (lsb << 8) | (uuid[10] & 0xff); |
| 67 | lsb = (lsb << 8) | (uuid[11] & 0xff); |
| 68 | lsb = (lsb << 8) | (uuid[12] & 0xff); |
| 69 | lsb = (lsb << 8) | (uuid[13] & 0xff); |
| 70 | lsb = (lsb << 8) | (uuid[14] & 0xff); |
| 71 | lsb = (lsb << 8) | (uuid[15] & 0xff); |
| 72 | |
| 73 | return new UUID(msb, lsb); |
| 74 | } |
| 75 | |
| 76 | private static final ThreadLocal<Random> threadRandom = |
| 77 | new ThreadLocal<Random>() { |
no test coverage detected