UUIDGeneratorpublic class UUIDGenerator extends Object simple generation of a UUID |
Fields Summary |
---|
public static final int | UUID_LENGTH | public static final int | UUID_VERSION | public static final int | BYTES_PER_INT | public static final int | BITS_PER_BYTE | protected static SecureRandom | secrand | protected static Random | rand |
Methods Summary |
---|
public static void | nextBytes(byte[] into, int offset, int length, java.util.Random r)Same as java.util.Random.nextBytes except this one we dont have to allocate a new byte array
int numRequested = length;
int numGot = 0, rnd = 0;
while (true) {
for (int i = 0; i < BYTES_PER_INT; i++) {
if (numGot == numRequested) return;
rnd = (i == 0 ? r.nextInt() : rnd >> BITS_PER_BYTE);
into[offset+numGot] = (byte) rnd;
numGot++;
}
}
| public static byte[] | randomUUID(boolean secure)
secrand = new SecureRandom();
secrand.setSeed(rand.nextLong());
byte[] result = new byte[UUID_LENGTH];
return randomUUID(secure,result,0);
| public static byte[] | randomUUID(boolean secure, byte[] into, int offset)
if ( (offset+UUID_LENGTH)>into.length )
throw new ArrayIndexOutOfBoundsException("Unable to fit "+UUID_LENGTH+" bytes into the array. length:"+into.length+" required length:"+(offset+UUID_LENGTH));
Random r = (secure&&(secrand!=null))?secrand:rand;
nextBytes(into,offset,UUID_LENGTH,r);
into[6+offset] &= 0x0F;
into[6+offset] |= (UUID_VERSION << 4);
into[8+offset] &= 0x3F; //0011 1111
into[8+offset] |= 0x80; //1000 0000
return into;
|
|