比较Java中的UUID

时间:2014-04-02 08:07:40

标签: java hash uuid

如果这些字符串相等,那么在Java中对于String对象的UUID是否相同?如果没有,是否有一种方法/工具来生成字符串(具有适当的UUID格式),如果将在相等的字符串上计算,它将保持不变?我需要某种字符串哈希值,保留UUID格式。 Java中有这样的东西吗?

[编辑]: 你会怀疑我正在尝试做什么。我正在制作应用程序的一部分,将对象从一个服务转换为另一个服务。其中一个服务人员是UUID的身份对象。第二个不存储它。我不想高速缓存这些服务的全部数据,因此我必须以某种方式生成该UUID。

3 个答案:

答案 0 :(得分:0)

  

如果这些字符串相等,那么在Java中UUID对于String对象是否相同?

不,因为这打印错误:

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等哈希,看看番石榴

答案 1 :(得分: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);

答案 2 :(得分:0)

是。您只需使用UUID.fromString()结果为uuid.toString()

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

assertTrue(id1, id2);