2012-03-22 2 views

답변

2

ObjectId 클래스에는 toString() 메서드가 있으며 생성자에 문자열이 제공 될 수 있습니다. 그러나이 문자열은 16 진수 (16 진수)이며 찾고자하는 문자열이 될 수 있습니다.

은 API 정보

여기에서 찾을 수있다 :베이스 64 인코딩 http://api.mongodb.org/java/current/

은 광산의 동료가 toByteArray() 메소드를 사용하는 것이 바람직하고,베이스 (64) 열을 그 변환 할 수 있다는 것을 제안했다. 다른 방법으로, ObjectId 생성자는 바이트 배열을 전달할 수 있습니다.

"java library base64 encoding"에 대한 Google 검색은 바이트 배열을 기본 64 개 문자열로 변환하고 다시 다시 읽는 것에 대한 자세한 내용이 포함 된 또 다른 스택 오버플로 질문을 나타냅니다.
Decode Base64 data in Java

위 스레드는 Apache Commons Codec의 일부인 base64 클래스에 대한 링크를 포함합니다.
http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html

이렇게하면 원하는 곳으로 이동하거나 최소한 추가 옵션을 고려해 보시기 바랍니다.

+0

고마워, 마크! 우린 교차로 게시 답변을 끝내는 것처럼 보입니다. 나는 주변을 파고 같은 해결책을 찾았다. – HolySamosa

0

Base64 대신 URLEncoderURLDecoder을 사용할 수 있습니다.이 문자열은 MongoDB와는 관계가 없지만 문자열을 유효한 URL 문자열로 변환합니다.

+0

감사합니다, 니코 외부 추가 라이브러리를 추가하지 않는,하지만 그게 내가 찾고 있어요 꽤 게 아니에요. Mongo의 ObjectID는 내부적으로 ObjectId가 외부에서 16 진수 문자열로 표현할 수있는 12 바이트의 이진 데이터입니다. 대신 객체를 base64 문자열로 표현하는 편리하고 효율적인 방법을 찾고 있습니다. – HolySamosa

1

ObjectId 소스 코드를 검토했지만 내부 문자열 정의 메소드가 도움이되지 않습니다.

ObjectId.toByteArray()ObjectId(byte[])을 외부 Base64 인코더/디코더와 함께 사용해야한다고합니다. Java Mongo 드라이버는 com.mongodb.util.Base64을 사용했지만 더 이상 라이브러리의 일부로 보이지 않으므로 Apache Commons에서 Base64 library을 사용했습니다.

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

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

를 사용하여 자바

parseBase64Binary (문자열 lexicalXSDBase64Binary)의 일부인 javax.xml.bind.DatatypeConverter가 변환 : 여기

는 아파치 코 몬즈에서 Base64로를 사용하여 변환의 예 base64를 이진 문자열 printHexBinary (byte [] val)로 변환하여 16 진수 문자열로 출력하십시오.

이의 장점은 JavaEE5 또는 Java 6

관련 문제