Base64 строковое представление MongoDB ObjectId в Java? - PullRequest
1 голос
/ 22 марта 2012

С помощью драйвера Java, как лучше всего преобразовать ObjectID в / из строки с кодировкой Base64?

ObjectIds будут частью URL, поэтому я бы хотел их немного сократить.

Ответы [ 4 ]

2 голосов
/ 22 марта 2012

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

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

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

Поиск в Google по запросу "java library base64 encoding" обнаруживает еще один вопрос переполнения стека, в котором содержится более подробная информация о преобразовании байтовых массивов в строки base 64 и обратно.
Декодирование данных Base64 в Java

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

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

1 голос
/ 23 марта 2012

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

Кажется, что вам нужно использовать ObjectId.toByteArray() и ObjectId( byte[]) в сочетании с внешним кодером / декодером Base64.Раньше драйвер Java Mongo имел com.mongodb.util.Base64, но, похоже, он больше не является частью библиотеки, поэтому я использовал библиотеку Base64 в 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 голосов
/ 24 августа 2012

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

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

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

0 голосов
/ 22 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...