2015-01-24 2 views
4

Я хочу взять тип UUID и вывести его в кодированном формате Base64, однако с учетом методов ввода на Base64 и выходов на UUID, как этого добиться не представляется очевидным.Как конвертировать UUID в base64?

обновления хотя и не является явным требованием для моего случая использования, было бы приятно знать, если метод использует необработанный UUID (в 128 бит, что UUID на самом деле) на UUID, в качестве стандартного шестигранного кодирования делает.

+0

Другое обсуждение здесь: http://stackoverflow.com/questions/772802/storing-uuid-as-base64-string – Stavr00

ответ

6

Во-первых, преобразовать UUID в байт буфера для потребления Base64 encoder:

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

Затем закодировать, что с помощью кодера:

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

В качестве альтернативы, вы можете получить строка, закодированная в Base64, такая как:

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

Я бы никогда не думал, что «toString» сначала, но хотя и не явное требование для меня, так же, как Base64, кодирующий необработанные байты UUID? – xenoterracide

+0

@xenoterracide Нет, это не одно и то же: я обновил свой ответ версией, использующей необработанные байты. –

0

Вы можете использовать Base64 из кодеков apache commons. 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

Я не проголосовал за ваш ответ, но дал вам подсказку, почему люди могут не понравиться: Ваш подход кодирует байты уже закодированного (шестнадцатеричный плюс некоторые разделители, а затем Unicode) строковое представление UUID в Base64, а не байты самого UUID. Также обратите внимание, что с Java 1.8 существует поддержка Base64 в самой стандартной библиотеке (http://docs.oracle.com/javase/8/docs/api/java/util/Base64.Encoder.html), поэтому нет необходимости для использования внешней библиотеки. – 5gon12eder

+1

Спасибо за конструктивный комментарий @ 5gon12eder Это делает вещи более ясными для остальных из нас, и это делает эту среду лучше (: –

Смежные вопросы