FasterXML Jackson Smile vs json

时间:2015-07-27 11:55:58

标签: java json serialization jackson

我正在浏览一些在线资源,发现jackson可以分别用于java对象和json字符串的序列化和反序列化。但与此同时,我找到了一种名为smile的东西。以下是我的疑惑:

  1. 是jackson json库序列化为基于文本的字节流,用于json表示
  2. 是微笑序列化为非文本,即用于相同二进制表示的二进制字节流
  3. 如果上述假设是正确的,则可以通过其他了解json的库(如某些python,ruby json序列化/反序列化库)对jackson json库中可用的字节进行反序列化。但微笑也是不可能的,因为它可能具有java对象的非常特定的二进制表示。我是对的吗?
  4. 如果我不对,请指导我回答。感谢。

    由于我对计算机科学领域很陌生,如果这个问题确实符合堆栈溢出标准,我会道歉。

2 个答案:

答案 0 :(得分:2)

普通JSON标记和Smile之间的主要区别在于Smile是JSON的二进制标记版本。由于微笑更紧凑,因此在反序列化时它具有更少的开销,并且对于大型和复杂的有效载荷来说是更好的选择。

何时使用每个标记:

  • JSON / XML - 当您想要确保API的兼容性时,同时将其与各种序列化协议分离。每种方法都有各种变体,包括嵌入式元数据,以便为数据提供更多上下文。
  • BSON / Smile / Kryo - 当你需要速度时。这可以是实时应用程序,数据收集,内部服务器通信。

这两种格式是兼容的:您可以通过包装正确的解码器来发送微笑并解码为JSON。

Some benchmark values for each

答案 1 :(得分:0)

为了清楚起见。我的性能测试显示,现代Jackson与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

始终使用最接近您的数据集进行测试。