首页 文章

FasterXML Jackson Smile vs json

提问于
浏览
1

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

  • 是jackson json库序列化为基于文本的字节流,用于json表示

  • 是微笑序列化为非文本,即用于相同二进制表示的二进制字节流

  • 如果上述假设是正确的,那么jackson json库中可用的字节可以被其他理解json的库反序列化(就像一些python,ruby json序列化/反序列化库) . 但微笑也是不可能的,因为它可能具有java对象的非常特定的二进制表示 . 我对么?

如果我不正确,请指导我回答 . 谢谢 .

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

2 回答

  • 0

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

    何时使用每个标记:

    • JSON / XML - 当您想要确保API的兼容性时,同时将其与各种序列化协议分离 . 每种方法都有各种变体,包括嵌入式元数据,以便为数据提供更多上下文 .

    • BSON / Smile / Kryo - 当你需要速度时 . 这可以是实时应用程序,数据收集,内部服务器通信 .

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

    Some benchmark values for each

  • 2

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

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

相关问题