2014-04-02 76 views
-1

如果這些字符串相等,那麼對於String對象,Java中的UUID是否相同?如果沒有,是否有方法/工具來生成字符串(具有適當的UUID格式),如果將在相同的字符串上計算,將保持不變?我需要某種類型的字符串散列,它保留UUID格式。在Java中有這樣的東西嗎?比較Java中的UUID

[編輯]: 你會問我想要做什麼exacly。我正在編寫一個將對象從一個servis轉換爲另一個的應用程序的一部分。其中一個Servees indentity由UUID反對。第二個不存儲它。我不想緩存這些服務的全部數據,所以我必須以某種方式生成該UUID。

+0

你想要一個基於名稱的UUID?如果你使用標準字符集將字符串轉換爲字節[](我現在正在使用UTF-8),那麼這將起作用。 – chrylis

+1

錯誤,一個UUID不是哈希... – fge

+0

類似的問題被回答在這裏:http://stackoverflow.com/questions/3804591/efficient-method-to-generate-uuid-string-in-java-uuid-randomuuid -tostring-w – Taks

回答

0

如果這些字符串是相同的,那麼在Java中對於String對象的UUID是相同的嗎?

沒有,因爲這會打印錯誤:

final String s = "Mémé dans les orties "; 
final UUID uuid1 = UUID.nameUUIDFromBytes(s.getBytes(StandardCharsets.UTF_8)); 
final UUID uuid2 = UUID.nameUUIDFromBytes(s.getBytes(StandardCharsets.UTF_16LE)); 
System.out.println(uuid1.equals(uuid2)); 

您需要編碼String成字節數組,並使用相同的編碼兩側。


更重要的是,一個UUID本身不是一個散列;如果你想要一個像SHA1,SHA256等哈希值,看看番石榴

0

試試這個

MessageDigest md = MessageDigest.getInstance("MD5"); 
    md.update("test".getBytes()); 
    byte[] a = md.digest();  // 16 bytes for MD5 
    ByteBuffer bb = ByteBuffer.wrap(a); 
    long l1 = bb.getLong(); 
    long l2 = bb.getLong(); 
    UUID uuid = new UUID(l1, l2); 
    System.out.println(uuid); 
0

是。你只需要使用UUID.fromString()uuid.toString()結果:

UUID id1 = UUID.randomUUID(); 
String s = id1.toString(); 
UUID id2 = UUID.fromString(s); 

assertTrue(id1, id2);