UUID.randomUUID 在 Android 发生碰撞
UUID.randomUUID collision in Android
我知道 UUID.randomUUID 大部分是好的:how good is java's UUID.randomUUID?
有没有人在 Android 和 UUID.randomUUID 上遇到过问题。由于 Android 使用 Dalvik VM。
我无法重现碰撞。但是,以下代码是可疑的(基于我的生产报告)并且可能会导致在两个不同的进程上 运行 发生冲突(两个应用程序具有相同的代码和不同的包,例如免费应用程序与专业应用程序) ?
private static final String PREFIX = Long.toString(UUID.randomUUID().getLeastSignificantBits());
任何 thoughts/experience 都会有所帮助!
正如我所见,http://docs.oracle.com/javase/7/docs/api/java/util/UUID.html 最低有效数字包含三个字段:
0xC000000000000000 variant
0x3FFF000000000000 clock_seq
0x0000FFFFFFFFFFFF node
如果不使用所有 UUID,就会增加发生冲突的机会。把所有的都拿来怎么样:private static final String PREFIX = UUID.randomUUID().toString();
通过这种方式,您将减少碰撞的机会。
我知道 UUID.randomUUID 大部分是好的:how good is java's UUID.randomUUID?
有没有人在 Android 和 UUID.randomUUID 上遇到过问题。由于 Android 使用 Dalvik VM。
我无法重现碰撞。但是,以下代码是可疑的(基于我的生产报告)并且可能会导致在两个不同的进程上 运行 发生冲突(两个应用程序具有相同的代码和不同的包,例如免费应用程序与专业应用程序) ?
private static final String PREFIX = Long.toString(UUID.randomUUID().getLeastSignificantBits());
任何 thoughts/experience 都会有所帮助!
正如我所见,http://docs.oracle.com/javase/7/docs/api/java/util/UUID.html 最低有效数字包含三个字段:
0xC000000000000000 variant
0x3FFF000000000000 clock_seq
0x0000FFFFFFFFFFFF node
如果不使用所有 UUID,就会增加发生冲突的机会。把所有的都拿来怎么样:private static final String PREFIX = UUID.randomUUID().toString();
通过这种方式,您将减少碰撞的机会。