2015-07-27 5 views
0

Я просматривал некоторые онлайн-ресурсы и обнаружил, что jackson может использоваться для сериализации и десериализации для java-объектов и json-строк соответственно. Но в то же время я нашел что-то под названием smile. Так ниже мои сомнения:FasterXML Jackson Smile vs json

  1. является библиотека джексон JSON сериализацию в текстовый поток байт, основанном на представление JSon
  2. является улыбкой сериализует в нетекстовую т.е. двоичного потока байт для же двоичного представления
  3. если вышеуказанные предположения являются правильно, тогда байт, доступный из библиотеки jackson json, может быть десериализован другими библиотеками, которые понимают json (например, некоторые библиотеки python, ruby ​​json serialization/deserialization). Но это невозможно для улыбки, так как может иметь очень специфическое двоичное представление объекта java. Я прав?

Если я ошибаюсь, пожалуйста, направьте меня на ответ. Благодарю.

Поскольку я очень новичок в области информатики, мои извинения, если этот вопрос действительно соответствует стандарту переполнения стека.

+0

Есть библиотеки поддержки улыбок для некоторых других прогланг, см .: https://github.com/FasterXML/jackson-dataformats-binary/tree/master/smile – StaxMan

ответ

2

Основное различие между обычной разметкой JSON и Smile заключается в том, что Smile представляет собой двоичную разметную версию JSON. Поскольку улыбка более компактна, при десериализации она имеет меньше накладных расходов и является лучшим вариантом для больших и сложных полезных нагрузок.

Когда использовать каждую разметку:

  • JSON/XML - если вы хотите, чтобы обеспечить совместимость с API, а развязка его из различных протоколов сериализации. Существуют вариации каждого, со встроенными метаданными, для обеспечения большего контекста для данных.
  • BSON/Smile/Kryo - Когда вам нужна скорость. Это может быть приложение реального времени, сбор данных, внутренняя связь с сервером.

Эти два формата совместимы: вы можете отправить Smile и декодировать как JSON, обернув соответствующий декодер.

Some benchmark values for each

+0

можете ли вы ответить на мои конкретные вопросы? – JasonBlacket

+1

Первые два утверждения верны, но третий может и не быть. Если сторонние библиотеки, используемые с обеих сторон, совместимы (такая же версия, поставщик), это не должно быть проблемой. Бинарное представление улыбки не является специфическим для языка или платформы, поэтому оно должно десериализоваться отлично. Я не думаю, что есть библиотека python jackson, но вы можете попробовать другую спецификацию, такую ​​как BSON или kryo. [Спецификация формата здесь] (http://wiki.fasterxml.com/SmileFormatSpec) –

+0

Обратите внимание, что 'kryo' несколько отличается тем, что является форматом сериализации объекта, а не самоописательным, как Smile или BSON (это , не содержит имен полей). Это, однако, кросс-платформенный.Но есть еще один двоичный формат JSON, в дополнение к BSON и Smile, называемый CBOR (http://cbor.io/), который также может представлять интерес. Фактически, несмотря на различную кодировку, ее набор функций и функционирование очень похожи на Smile. – StaxMan

0

Просто для ясности. Мое тестирование производительности показало, что современный Джексон с Afterburner имеет одинаковую скорость с JSON и Smile. Bson4Jackson в 5 раз медленнее.

jacksonMapper_Json__Stream  thrpt 5 950,796 ± 60,451 ops/ms 
jacksonMapper_Json__Stream_Ab thrpt 5 1572,641 ± 43,928 ops/ms 
jacksonMapper_Smile__Stream  thrpt 5 945,343 ± 25,617 ops/ms 
jacksonMapper_Smile__Stream_Ab thrpt 5 1482,769 ± 27,915 ops/ms 
jacksonMapper_Bson__Stream  thrpt 5 329,239 ± 12,119 ops/ms 
jacksonMapper_Bson__Stream_Ab thrpt 5 361,253 ± 30,670 ops/ms 

Всегда проверяйте набор данных, ближайший к вашему.

Смежные вопросы