2012-03-22 96 views

回答

2

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

希望這會讓你得到你需要去的地方,或者至少給你一些額外的選擇來考慮。

+0

謝謝,Marc!看起來我們結束了交叉發佈答案。我挖掘並提出了相同的解決方案。 – HolySamosa 2012-03-22 20:13:00

0

而不是Base64,你可以使用URLEncoderURLDecoder,這與MongoDB無關,但將字符串轉換爲有效的URL-Strings。

+0

謝謝,尼科,但那不是我想要的。 Mongo的ObjectID在內部是12字節的二進制數據,ObjectId可以在外部表示爲十六進制字符串。我正在尋找一種方便/高效的方式將對象表示爲base64字符串。 – HolySamosa 2012-03-22 17:49:46

1

我看着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()); 
} 
0

使用javax.xml.bind.DatatypeConverter這就是Java

parseBase64Binary(字符串lexicalXSDBase64Binary)的一部分轉換base64轉換爲二進制字符串 printHexBinary(byte [] val)將其打印爲十六進制字符串。

這樣做的好處是你不在JavaEE5或Java 6之外添加任何額外的庫文件

相關問題