使用Java驅動程序,使用Base64編碼將ObjectID轉換爲字符串或從字符串轉換字符串的最佳方法是什麼?Java中MongoDB ObjectId的Base64字符串表示形式?
ObjectIds將成爲URL的一部分,所以我想縮短它們一下。
使用Java驅動程序,使用Base64編碼將ObjectID轉換爲字符串或從字符串轉換字符串的最佳方法是什麼?Java中MongoDB ObjectId的Base64字符串表示形式?
ObjectIds將成爲URL的一部分,所以我想縮短它們一下。
ObjectId類確實有一個toString()方法,並且可以在構造函數中提供一個字符串。但是,這些字符串是16位(十六進制),可能是您正在查找的內容。
的API的信息可以在這裏找到: http://api.mongodb.org/java/current/
對於底座64的編碼,我的同事表明,可以優選使用toByteArray()方法,並且將其轉換成一個基部64字符串。換句話說,ObjectId構造函數可能會傳遞一個字節數組。
谷歌搜索「java庫base64編碼」揭示了另一個堆棧溢出問題,其中包含有關將字節數組轉換爲基本64個字符串並再次返回的更多詳細信息。
Decode Base64 data in Java
上述線程包含指向base64類(Apache Commons Codec的一部分)的鏈接。
http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html
希望這會讓你得到你需要去的地方,或者至少給你一些額外的選擇來考慮。
而不是Base64,你可以使用URLEncoder和URLDecoder,這與MongoDB無關,但將字符串轉換爲有效的URL-Strings。
謝謝,尼科,但那不是我想要的。 Mongo的ObjectID在內部是12字節的二進制數據,ObjectId可以在外部表示爲十六進制字符串。我正在尋找一種方便/高效的方式將對象表示爲base64字符串。 – HolySamosa 2012-03-22 17:49:46
我看着ObjectId源代碼,並沒有任何內部的字符串ifying方法幫助。
似乎您需要將ObjectId.toByteArray()
和ObjectId(byte[])
與外部Base64編碼器/解碼器一起使用。 Java Mongo驅動程序曾經有com.mongodb.util.Base64
,但它似乎不再是庫的一部分,所以我在Apache Commons中使用了Base64 library。
下面是Apache的共享使用Base64編碼的轉換的例子:
static public ObjectId toObjectId(String stringId)
{
return new ObjectId(Base64.decodeBase64(stringId));
}
static public String toString(ObjectId objectId)
{
return Base64.encodeBase64URLSafeString(objectId.toByteArray());
}
使用javax.xml.bind.DatatypeConverter這就是Java
parseBase64Binary(字符串lexicalXSDBase64Binary)的一部分轉換base64轉換爲二進制字符串 printHexBinary(byte [] val)將其打印爲十六進制字符串。
這樣做的好處是你不在JavaEE5或Java 6之外添加任何額外的庫文件
謝謝,Marc!看起來我們結束了交叉發佈答案。我挖掘並提出了相同的解決方案。 – HolySamosa 2012-03-22 20:13:00