在 IoT 应用程序中使用 JSON 的最佳库是什么?

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

在这篇文章中,我包括了我们的 JSON 解析器的性能。如果可以选择,出于多种原因我建议使用 YAML,但是如果您必须使用 JSON,性能比较如何?

消息

该消息很简单,但包含一些数据错别字。


 "price":1234,"longInt":1234567890,"smallInt":123,"flag":true,
"text":"Hello World!","side":"Sell"

实际消息中没有新行

表演

现在是编写和阅读消息的时候了。

这些计时以微秒(0.001 毫秒)为单位

有线格式 字节 99.9 %平铺 99.99 %平铺 99.999 %平铺 最差
JSONWire 100* 3.11 5.56 10.6 36.9
杰克逊 100 4.95 8.3 1,400 1,500
杰克逊+ C字节 100* 2.87 10.1 1,300 1,400
BSON 96 19.8 1,430 1,400 1,600
BSON + C 字节 96* 7.47 15.1 1,400 11,600
布恩杰森 100 20.7 32.5 11,000 69,000

“C-Bytes”是指使用 Chronicle Bytes 提供回收缓冲区。

“*”表示此数据是写入直接内存/从直接内存读取的,不需要额外复制才能与 NIO 一起使用。

代码与这篇 文章 和这篇 文章 相同,唯一不同的是使用了 JSONWire。

结论

JSONWire 可能是一个非常好的性能选择,尤其是在需要通过超低垃圾产生来实现一致的低延迟的情况下。