2010-09-20 5 views

ответ

1

Вы можете проверить драйверы MongoDB для этих языков, поскольку MongoDB использует BSON. Посмотрите, что они используют, или украсть их реализацию.

3

Другая возможность BSON4Jackson расширение для Jackson, который добавляет поддержку для BSON чтения/записи.

0

BSON encoder/decoder в Java довольно тривиален. Следующий фрагмент кода из моего приложения, так что он находится в Scala. Я уверен, что вы могли бы легко реализовать реализацию Java.

import org.bson.BSON 
import com.mongodb.{DBObject, DBDecoder, DefaultDBDecoder} 

def convert(dbo: DBObject): Array[Byte] = 
    BSON.encode(dbo) 

// NB! this is a stateful object and thus it's not thread-safe, so have 
// to create one per decoding 
def decoder: DBDecoder = DefaultDBDecoder.FACTORY.create 

def convert(data: Array[Byte]): DBObject = 
    // NOTE: we do not support Ref in input, that's why "null" for DBCollection 
    decoder.decode(data, null) 

def convert(is: InputStream): DBObject = 
    // NOTE: we do not support Ref in input, that's why "null" for DBCollection 
    decoder.decode(is, null) 

Единственное существенное замечание, что DBEncoder экземпляр имеет внутреннее состояние его (вос) используется в процессе декодирования, так что это не поточно-. Это должно быть нормально, если вы декодируете объекты один за другим, но в противном случае вам лучше создать экземпляр для сеанса декодирования.

0

А вот C++ 11 JSON кодировщик и декодер, которые я сделал с помощью Rapidjson, потому что собственный кодировщик JSON (BSONObj::jsonString) использует нестандартную кодировку для длин: https://gist.github.com/ArtemGr/2c44cb451dc6a0cb46af

Кроме того, в отличие от встроенного кодека JSON, у этого нет проблем с декодированием массивов верхнего уровня.