点击上方蓝色“程序猿DD”,选择“设为星标”

回复“资源”获取独家整理的学习资料!

来源:toutiao.com/i6815906868183958027

  • 一、FastJson为何

  • 二、真的很快吗?

  • 三、FastJson并没有那么流行

  • 四、弃坑fastjson


一、FastJson为何

首先抄录一段来自官网的介绍:FastJson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

FastJson是Java程序员常用到的类库之一,相信点开这个页面的你,也肯定是程序员朋友。正如其名,“快”是其主要卖点。

二、真的很快吗?

没有调研就没有发言权,本着“追求真理”的初心,来一轮简单的测试。对比对象选择应用最广泛的Jackson和Google出品的Gson。测试环境选择JDK 8,AMD 3700X,3200MHZ内存。简化实验,只测试简单对象和复杂对象的String转对象、对象转String,调用1千万次的对比结果如下(时间单位是毫秒):

从测试结果看,FastJson确实是最快的,但仅比Jackson快20%左右,Google的Gson是最慢的,差距较大。读到这里,是不是觉得选择FastJson肯定没错啊!如果面试官问为什么选择FastJson?因为快!这一个理由就可以把他顶回去了。

这里的调查研究并不是很充分,没有对内存占用、大文档的测试。

在现代应用程序中,即使最慢的Gson,也是满足需求的;解析文档速度的快慢,并不能作为选型的唯一标准,可能连主要标准都算不上。对IO优化,并行处理等优化措施,比选用一个更快的库更有效。

三、FastJson并没有那么流行

然而,FastJson并没有那么流行,有一个最直观的数据,那就是在Maven的中的引用量,和Jackson和Gson不在一个数量级,和Jackson强大的家族更没法比。

难道我用了一个假的流行的国产类库?在知乎看到了一篇帖子,讨论为什么外国友人不喜欢FastJson。结论就是FastJson是个代码质量不高的国产类库。完全颠覆了我的认知,因为在我的项目中,是经常使用FastJson的,并没有出现什么Bug,而且这段评论是在2016年写的。

抱着怀疑的态度,打开FastJson的地址,看到大家提的Issues。竟然有1283个未解决的Issues。红框标识出来的,我自己拿去研究下,因为我看到下面还有人提了一样的问题。

测试代码如下:

果然,在采用了最新版本的类库后,如问题描述的,还是有异常。于是就看到了如下的源代码:

这段代码有严重的逻辑错误,这样错误的格式,例如:

“1970-01-01 00:00:00.000000000.000000000”

或者

“1970-01-01 00:00:00.000000000.000000”

也能转换成功,而一些正确的格式,例如:

““1970-01-01 00:00:00”,““1970-01-01 00:00:00.000”

却转换失败。

结合知乎上网友的点评,我本人也觉得FastJson并没有那么优秀,另一些深入的点评,例如ASM,我的理解并不深,就不做测试了。

四、弃坑fastjson

在我负责的项目中,因为SpringBoot相关的框架中,应用了Jackson,本着“最少依赖”的原则,json解析应用了Jackson。但是很多同事的代码中,也用了Gson和Fastjson,当然,是没有严格规范要求的结果。

通过今天的一个小小研究,Jackson的流行,是有着内在的原因的。在我们以后的项目中,主推Jackson,逐渐的淘汰Fastjson。

往期推荐

MySQL 数据库的优化,你知道有哪些?

某生鲜电商平台的监控模块设计

色情版“微信”背后的秘密

Docker 入门终极指南:边学边用

推荐一款日志切割神器

成为最差开发者的10条建议

扫一扫,关注我

一起学习,一起进步

每周赠书,福利不断

深度内容

推荐加入

最近热门内容回顾   #技术人系列

为什么要强制弃坑Fastjson而主推Jackson?相关推荐

  1. 真能一快遮百丑?为什么要弃坑FastJson

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 转自:咔咔侃技术链接:https://www.toutia ...

  2. 真能一快遮百丑?为什么要弃坑 FastJson

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:咔咔侃技术 toutiao.com/i68159068681 ...

  3. freenas安装使用和弃坑

    简介 最近入手了一个nas,对于nas系统选择的方面,开始我是使用u-nas,但是这个系统web界面不是特别好,在安装软件方面bug很多,给人的感觉就是不是特别稳定,对于黑群晖我也是拒绝的,所以考虑再 ...

  4. Redis 从入门到弃坑

    Redis 从入门到弃坑 简介 摘自:http://www.redis.cn/ Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的 ...

  5. BM弃坑EOS:江山易改,本性难移

    (图片来源于网络) 10号,BM宣布辞去EOS的CTO(首席技术官)职务.EOS应声下跌.其实都不用应声下跌,从比特币开启这一波小牛行情以来,EOS就没涨过.EOS持币者相互开玩笑说,EOS横盘水平堪 ...

  6. 碧蓝航线账号服务器查询,碧蓝航线哔哩哔哩账号登录弃坑一段时间后再登陆以前充的钱没了怎么办(所有数据都没了)...

    1.首先登陆碧蓝航线,确保账号是在同一个区(ios区和安卓区) 2.选择服务器,确保自己的服务器与上次登录的服务器相同.(服务器右边的小人就是提示你上次登录的服务器) 如果是不同的服务器,系统会默认重 ...

  7. devc++64位不兼容_DNF玩家遭强制脱坑,只因64位更新后无法上游戏,如何解决?...

    DNF就在8月20更新了64位的客户端,对于此次从32位客户端升级至64位客户端,其实策划早在一个月之前就对玩家告知了,得知了更新之后会减少卡顿,掉线,C++报错的现象,玩家也是非常期待64位客户端的 ...

  8. 浮点高精求和(洛谷P2393题题解,弃坑Java拥抱C++)

    题目要求 P2393题目链接 分析 这题实则是变态的大浮点加法,众所周知的是浮点不精确,按照IEEE754来. 原先使用Java写的,但下面分析一下为什么不能用Java写. 这代码本来是这么写的: i ...

  9. PAT/PTA甲级2020春季题目【满分】弃坑贴

    开局上张图: 更一下题目通过率,有点吃惊... PAT甲级考纲:(官网目前已经删除了,以前是有的,见下文) 先说一下今天考试的整体情况: 因为这是第一次线上考试,导致很多地方包括很多同学的网络,设备等 ...

最新文章

  1. MySQL数据库知识汇总
  2. 玩转百度地图(二)之画圆,高德地图、搜搜地图、搜狗地图等稍微修改即可...
  3. UA MATH563 概率论的数学基础 鞅论初步8 鞅收敛定理
  4. 织梦手机软件应用app下载排行网站模板
  5. 深度学习中的损失函数总结以及Center Loss函数笔记
  6. 千兆网线8根线定义图_网线水晶头如何制作及怎么测试?
  7. 面向对象有哪几种常用的设计模式,六大设计原则是什么
  8. 四部门联合约谈蚂蚁集团有关人员;苹果11月11日再开发布会;树莓派 400 发布|极客头条
  9. 2. 配置Xdebug
  10. 又是Access做怪,DateTime类型操作失败
  11. 【硬件驱动系列】DirectSound vs ASIO
  12. vivo X9的usb调试模式在哪里,开启vivo X9usb调试模式的方法
  13. 信息收集(部分,不全面)
  14. python——【2】gzip模块二进制格式读取压缩文件
  15. turtle绘制奥运五环
  16. 堆栈与动态分配内存空间
  17. Mac有滚动截图工具吗?----解救 MAC 使用者们的高效截图工具- Xnip
  18. 腾讯云自定义配置购买云服务器图文操作教程 新手必看!
  19. 用Python实现URL Encoding和Decoding
  20. 宋洪方:互联网+酒店案例分享

热门文章

  1. Asp.net用户管理API的应用(上)
  2. python 静态变量 静态方法 简介
  3. linux centos ubuntu yum apt-get 强制使用 ipv4 ipv6
  4. golang http 操作 简介
  5. java struts2标签库 常用标签
  6. Qt qCompress和qUncompress 压缩和解压文件
  7. 内核模式下的文件操作
  8. Linux 多线程编程
  9. Java学习之数据类型
  10. Python.Paste指南之Deploy(1)-概念