Java 使用UUID生成可复制的ID?

Java 使用UUID生成可复制的ID?,java,Java,我使用的是UUID.randomUUID().getLeastSignificantBits()以生成唯一ID。但是,我希望在每次运行应用程序时生成相同的ID,以便调试代码。我该怎么做 编辑:多亏了ZimZam,我创建了这个类来解决这个问题 public class IDGenerator { private static Random random = new Random(1); public static long getID() { long id; byte[] arr

我使用的是
UUID.randomUUID().getLeastSignificantBits()以生成唯一ID。但是,我希望在每次运行应用程序时生成相同的ID,以便调试代码。我该怎么做

编辑:多亏了ZimZam,我创建了这个类来解决这个问题

public class IDGenerator {
private static Random random = new Random(1);
public static long getID() {
    long id;
    byte[] array = new byte[16];
    random.nextBytes(array);
    id = UUID.nameUUIDFromBytes( array ).getLeastSignificantBits();
    return id;
}
}

您可以使用
UUID.nameuidfrombytes(byte[]bytes)
从您使用的
Random
SecureRandom
种子中获取
byte[/code>,提供相同的种子。

我将创建自己的类,该类封装UUID类,并可以接受某种标志,以确定它是否处于调试模式,在这种情况下,它将返回常量值,在“生产”模式下,它将按预期工作


一个更干净的解决方案是定义一个像irandomuidgeGenerator这样的接口,并为其提供两个实现:ConstantuuidgeGenerator,可用于测试,DefaultRandomUuidgeGenerator实现用于生产代码。然后,您可以根据您的环境在配置文件中指定要使用的实现

我认为您缺少UUID的要点。我应该为字节数组的大小选择多少?@guckogucko如果您使用16字节(128位)
byte[]
,那么它将具有与UUID相同的熵;没有理由使用较大的字节数组,但如果不需要太多的熵,可以使用较小的字节数组(例如,如果您只使用UUID的最低有效位,那么您可能可以使用8字节
字节[]
),请检查我的编辑(代码),所以我可以把这个问题标记为已解决?@guckogucko
新字节[120]
太过分了-使用
新字节[16]
新字节[8]
很抱歉刚才的问题,但是做
新UUID(rng.nextLong(),rng.nextLong())
来获得一个可复制的UUID难道不正确吗?