2012-03-22 2 views

ответ

2

Класс ObjectId имеет метод toString(), и строка может быть предоставлена ​​в конструкторе. Однако эти строки имеют base-16 (шестнадцатеричный) и могут быть тем, что вы ищете.

Информация по API может быть найдена здесь: http://api.mongodb.org/java/current/

Для базового 64 кодирования, мой коллега предположил, что может быть предпочтительным использовать метод toByteArray(), и конвертировать, что в строку базовой 64. С другой стороны, конструктор ObjectId может быть передан массив байтов.

Поиск в Google для «кодировки базы java-библиотеки base64» раскрывает другой вопрос о переполнении стека, содержащий более подробные сведения о преобразовании массивов байтов в базовые 64 строки и обратно.
Decode Base64 data in Java

В приведенной выше статье содержится ссылка на класс base64, входящий в состав кодека Apache Commons.
http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html

Надеемся, это поможет вам, когда вам нужно идти, или, по крайней мере, дать вам дополнительные возможности для рассмотрения.

+0

Спасибо, Марк! Похоже, мы закончили перекрестные публикации ответов. Я порылся и придумал то же самое решение. – HolySamosa

0

Вместо Base64 вы можете просто использовать URLEncoder и URLDecoder, что не имеет ничего общего с MongoDB, но преобразует строки в действительные URL-строки.

+0

Спасибо, Нико, но это не совсем то, что я ищу. Объектно-идентификационные данные Mongo's составляют внутренне 12 байтов двоичных данных, которые ObjectId может внешне представлять в виде шестнадцатеричной строки. Я ищу удобный/эффективный способ представления объекта как base64 string. – HolySamosa

1

Я посмотрел на исходный код ObjectId, и ни одна из внутренних методов проверки строки не помогает.

Похоже, что вы должны использовать ObjectId.toByteArray() и ObjectId(byte[]) в сочетании с внешним кодером/декодером Base64. Драйвер Java Mongo имел com.mongodb.util.Base64, но, похоже, он больше не является частью библиотеки, поэтому я использовал Base64 library в Apache Commons.

Вот пример преобразования с использованием Base64 в Apache Commons:

static public ObjectId toObjectId(String stringId) 
{ 
    return new ObjectId(Base64.decodeBase64(stringId)); 
} 

static public String toString(ObjectId objectId) 
{ 
    return Base64.encodeBase64URLSafeString(objectId.toByteArray()); 
} 
0

Используйте javax.xml.bind.DatatypeConverter, который является частью Java

parseBase64Binary (String lexicalXSDBase64Binary) для преобразования base64 в двоичную строку printHexBinary (byte [] val), чтобы распечатать ее как шестую строку.

Преимущество это вы не добавления каких-либо дополнительных библиотек за пределами JavaEE5 или Java 6

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