我正在浏览一些在线资源,发现jackson可以分别用于java对象和json字符串的序列化和反序列化 . 但与此同时我发现了一种名为smile的东西 . 以下是我的疑惑:
-
是jackson json库序列化为基于文本的字节流,用于json表示
-
是微笑序列化为非文本,即用于相同二进制表示的二进制字节流
-
如果上述假设是正确的,那么jackson json库中可用的字节可以被其他理解json的库反序列化(就像一些python,ruby json序列化/反序列化库) . 但微笑也是不可能的,因为它可能具有java对象的非常特定的二进制表示 . 我对么?
如果我不正确,请指导我回答 . 谢谢 .
由于我对计算机科学领域很陌生,如果这个问题适合堆栈溢出标准,我道歉 .
2 回答
普通JSON标记和Smile之间的主要区别在于Smile是JSON的二进制标记版本 . 由于微笑更紧凑,因此在反序列化时它具有更少的开销,并且对于大型和复杂的有效载荷来说是更好的选择 .
何时使用每个标记:
JSON / XML - 当您想要确保API的兼容性时,同时将其与各种序列化协议分离 . 每种方法都有各种变体,包括嵌入式元数据,以便为数据提供更多上下文 .
BSON / Smile / Kryo - 当你需要速度时 . 这可以是实时应用程序,数据收集,内部服务器通信 .
这两种格式是兼容的:你可以通过包装正确的解码器发送微笑并解码为JSON .
Some benchmark values for each
为了清楚起见 . 我的性能测试显示,现代Jackson与Afterburner的速度与JSON和Smile的速度相同 . Bson4Jackson慢了5倍 .
始终使用最接近您的数据集进行测试 .