2013-07-18 123 views
0

我使用UUID.randomUUID().getLeastSignificantBits();來生成唯一的ID。不過,爲了調試我的代碼,每次運行應用程序時都要生成相同的ID。我怎樣才能做到這一點?使用UUID生成可重複的ID?

編輯:感謝zim-zam我創建了這個類來解決這個問題。

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; 
} 
} 
+6

我想你錯過了UUID的要點。 –

回答

3

,你從RandomSecureRandom你播種

+0

我應該選擇多少字節數組的大小? –

+0

@guckogucko如果你使用16字節(128位)'byte []',那麼它將具有與UUID相同的熵;沒有理由使用更大的字節數組,但是如果不需要太多的熵,則可以使用更小的字節數組(例如,如果只使用UUID的最低有效位,那麼您可能會使用8字節'byte []') –

+0

你能檢查我的編輯(代碼),所以我可以標記問題解決? –

1

使用java.util.Random,提供相同的種子獲得byte[] bytes您可以使用UUID.nameUUIDFromBytes(byte[] bytes)

2

我會創建我自己的包裝UUID類的類,它可以接受某種標誌以確定它是否處於調試模式,在這種情況下,它將返回一個常量值或「生產」模式,在這種情況下它將工作如預期。

一個更簡潔的解決方案是定義一個像IRandomUUIDGenerator這樣的接口,並且有兩個接口:ConstantUUIDGenerator,可以用於測試,DefaultRandomUUIDGenerator實現用於生產代碼。然後,您可以在配置文件中指定要根據您的環境使用哪個實施。