2015-01-24 5 views
4

Base64에 입력 방법이 주어진 경우 UUID을 출력하고 Base64 형식으로 출력하려면 UUID에 출력하는 방법이 명확하지 않은 것 같습니다.UUID를 base64로 변환하려면 어떻게해야합니까?

갱신하지만 내 사용 사례되지 명시 적 요구 사항, 사용되는 방법은 원시 UUID UUID를의 (A UUID 실제로 128 비트)를 사용하는 경우 아는 것이 좋을 것이다 표준 진수 인코딩 등 않습니다.

+0

다른 토론은 여기에서 : http://stackoverflow.com/questions/772802/stest-uuid-as-base64-string – Stavr00

답변

6

는 첫째, Base64 encoder에 의해 소비 byte 버퍼에 UUID를 변환 : 또는

byte[] encoded = encoder.encode(uuidBytes); 

, 당신이 얻을 수 :

ByteBuffer uuidBytes = ByteBuffer.wrap(new bytes[16]); 
uuidBytes.putLong(uuid.getMostSignificantBits()); 
uuidBytes.putLong(uuid.getLeastSignificantBits()); 

그런 다음 인코더를 사용하는 것을 인코딩 다음과 같은 Base64로 인코딩 된 문자열 :

String encoded = encoder.encodeToString(uuidBytes); 
+0

). 나는 결코 toString을 처음 생각하지 않았지만 명시 적 요구 사항은 아니지만 실제로는 Base64로 UUID의 원시 바이트를 인코딩하는 것과 동일합니까? – xenoterracide

+0

@xenoterracide 아니요, 동일하지 않습니다. 원시 바이트를 사용하는 버전으로 내 대답을 업데이트했습니다. –

0

아파치 커먼즈 코덱에서 Base64를 사용할 수 있습니다. https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/binary/Base64.html

import java.util.UUID; 
import org.apache.commons.codec.binary.Base64; 

public class Test { 

    public static void main(String[] args) { 
     String uid = UUID.randomUUID().toString(); 
     System.out.println(uid); 
     byte[] b = Base64.encodeBase64(uid.getBytes()); 
     System.out.println(new String(b)); 
    } 

} 
+5

나는 답을 낮추지 않았지만 왜 사람들이 그것을 싫어하는 것인지 힌트를주기 위해 : 사용자의 접근 방식은 UUID 자체의 바이트가 아니라 Base64에서 UUID의 이미 인코딩 된 (16 진수 + 일부 구분 기호, 유니 코드) 문자열 표현을 인코딩합니다. 또한 Java 1.8 이후에는 표준 라이브러리 자체에 [Base64 지원] (http://docs.oracle.com/javase/8/docs/api/java/util/Base64.Encoder.html)이 있으므로 필요가 없습니다. 더 이상 외부 라이브러리를 사용하십시오. – 5gon12eder

+1

건설적인 코멘트 @ 5gon12eder 주셔서 감사합니다. 우리의 나머지 부분에 대해서는 더 명확하게 보이며, 더 나은 환경을 만듭니다 ( –

관련 문제