2014-04-02 2 views
-1

Java에서 String 객체의 UUID는 문자열이 동일한 경우 동일합니까? 그렇지 않으면 같은 방법으로 문자열을 계산할 수 있다면 문자열을 생성하는 방법이 있습니까 (적절한 UUID 형식으로)? 문자열에 대해 일종의 해시가 필요합니다. UUID 형식을 유지해야합니다. 자바 같은 것이 있습니까?Java에서 UUID 비교

[편집] : 내가 뭘하려고하고 있는지 궁금 할 것입니다. 저는 한 servis에서 다른 servis로 객체를 번역 할 응용 프로그램의 일부를 만들고 있습니다. 그 중 하나는 UUID에 의한 indentity 객체들입니다. 두 번째 것은 그것을 저장하지 않습니다. 이러한 서비스의 전체 데이터를 캐싱하지 않으려면 어떻게 든 UUID를 생성해야합니다.

+0

당신은 이름 기반 UUID를 원하는 있습니까 : 그냥 uuid.toString()의 결과 UUID.fromString()을 사용할 수 있나요? 표준 문자 세트를 사용하여'String '을'byte []'로 변환하면 (즉, 지금 이것을하고 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

String 객체의 Java 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

살펴 Yes (예)이

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 id1 = UUID.randomUUID(); 
String s = id1.toString(); 
UUID id2 = UUID.fromString(s); 

assertTrue(id1, id2);