X.M*_*.M. 2 java uuid guid uid
我需要在Java中生成一个唯一的32位数.我需要将数字作为Java int返回,这是接口所需的.你能否就此分享一些想法?
该号码将用作MySQL PK,并且多个线程可以同时生成自己的唯一ID.(抱歉决定不使用MySQL增量ID)
我尝试过UUID类,但它生成的数据似乎比我可以使用的更多.
我发现了这个,但不确定它是否有效:
// seems no way to get int
UUID id = UUID.randomUUID();
System.out.println(id);
// not working either?
java.rmi.server.UID uid = new java.rmi.server.UID();
System.out.println(uid.toString());
// the one i am using
SecureRandom prng = SecureRandom.getInstance("SHA1PRNG");
prng.setSeed(System.currentTimeMillis());
int ret = prng.nextInt();
System.out.println(ret);
Run Code Online (Sandbox Code Playgroud)
你想要多么"独特"?简而言之,碰撞域是什么?如果你正在处理成千上万的密钥,那么Random.nextInt()完全符合你所想要的版本4 UUID(UUID v4生成128个随机位).
如果你需要一个碰撞机会较少的东西,那么你需要有一个全局递增的整数,但这里要特别注意,比如在JVM启动之间保持状态.为此你应该看看AtomicIntegers.