网易首页 > 网易号 > 正文 申请入驻

为什么我们公司强制弃坑FastJson了?主推Jackson~

0
分享至

  # 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。红框标识出来的,我自己拿去研究下,因为我看到下面还有人提了一样的问题。

  

  测试代码如下:

   try { String time = "1970-01-01 00:00:00"; com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject(); jsonObject.put("time", time); Timestamp timestamp = jsonObject.getTimestamp("time"); System.out.println("time:" + timestamp); } catch (Exception e) { e.printStackTrace(); }

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

  if (strVal.endsWith(".000000000")) { strVal = strVal.substring(0, strVal.length() - 10); } else if (strVal.endsWith(".000000")) { strVal = strVal.substring(0, strVal.length() - 7); }if (strVal.length() == 29 && strVal.charAt(4) == '-' && strVal.charAt(7) == '-' && strVal.charAt(10) == ' ' && strVal.charAt(13) == ':' && strVal.charAt(16) == ':' && strVal.charAt(19) == '.') { int year = num(strVal.charAt(0), strVal.charAt(1), strVal.charAt(2), strVal.charAt(3)); int month = num(strVal.charAt(5), strVal.charAt(6)); int day = num(strVal.charAt(8), strVal.charAt(9)); int hour = num(strVal.charAt(11), strVal.charAt(12)); int minute = num(strVal.charAt(14), strVal.charAt(15)); int second = num(strVal.charAt(17), strVal.charAt(18)); int nanos = num(strVal.charAt(20), strVal.charAt(21), strVal.charAt(22), strVal.charAt(23), strVal.charAt(24), strVal.charAt(25), strVal.charAt(26), strVal.charAt(27), strVal.charAt(28)); return new Timestamp(year - 1900, month - 1, day, hour, minute, second, nanos); }

  这段代码有严重的逻辑错误,这样错误的格式,例如:“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

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

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

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐

列宁求中国一事,当初若答应就把150万土地还回来,中国为啥拒绝

冷静得蚂蚁
2020-12-02 17:51:16

欧洲占星家预测,2021跟2020年一样灾难不断,黑暗年

鲁晓芙看欧洲
2020-12-06 03:17:08

衰落最快的三所大学,曾和北大天大齐名,现在连211都不是

万千新鲜事
2020-12-05 15:06:55

中国“赶超”美国步伐加速!日媒:近2万高学历人才来华

海峡新讯
2020-12-05 17:39:36

11岁被导演看中,与著名导演同居多年被抛弃,如今复出无人问津

飘飘然的娱乐汇
2020-12-06 06:05:02

娱乐圈多夸张?小助理吐槽:十八线明星用不起Dior

注缘娱乐
2020-12-04 08:42:37

谁来救救李一桐啊!

白日要做梦
2020-12-04 08:56:57

清朝最后一位太监自述:后宫娘娘们洗澡的过程,最让太监难以接受

历史在干嘛
2020-12-03 17:25:48

警惕!毁掉你健康的就是这些"凶手",很多人都不知道

科普中国
2020-12-05 14:37:06

果然,特朗普任性,台湾付出惨痛“代价”!

时代之声V
2020-12-05 16:23:53

13例!3年前,李显龙总理说,新加坡部长在中国像个“乡巴佬”。昨天,这一切变了!

新加坡椰子
2020-12-05 17:16:32

美国载人登月造假?五星红旗月面动态展示,对比之下差别不大

科学放大镜
2020-12-05 20:18:53

感人!退伍老兵路过老部队下车敬礼

中国军视网
2020-12-05 16:13:17

真有外星人?外媒曝五角大楼报告泄露:空军飞行员拍到不明飞行物

华观海
2020-12-05 11:48:10

嫦娥五号的下一个动作,才是世界首次,背后的意义非同小可

我们的百变生活
2020-12-06 04:29:26

那个做吴秀波小三7年,要3000万被送进监狱的女孩,现在怎么样?

新氧
2020-12-04 00:29:39

依然没有特效药!钟南山又说话了

团中央学校部
2020-12-05 08:55:12

为什么深圳大龄剩女那么多?看看这要求你就知道原因了?

小陆美食生活
2020-12-03 07:25:42

人渣!女更衣室都不放过,快船记者怒爆伦纳德无耻特权

体育课副班长
2020-12-05 17:55:56

40岁董洁再扮少女惹争议:一个人过得好不好,都写在了脸上

精读君
2020-12-04 11:33:36
2020-12-06 11:04:59
会呼吸的Coder
会呼吸的Coder
科技改变世界
292文章数 933粉丝数
往期回顾 全部

科技要闻

嫦娥五号完成交会对接!"快递"正在派送!

头条要闻

眼睁睁看女孩跳河溺亡 警察真的“尽力了”?

头条要闻

丈夫出轨小三上门挑衅 妻子遭两人暴打被要求净身出户

体育要闻

西甲-双中卫相继送礼 巴萨1-2升班马客场4场不胜

娱乐要闻

杨幂穿红裙大秀好身材 眼下画爱心

财经要闻

汽车要闻

作为一个上班族 距离买百万豪车究竟有多远?

态度原创

手机
旅游
本地
家居
时尚

手机要闻

苹果iPhone12系列待机异常耗电:或基带故障

旅游要闻

男人的天堂!走进以色列特拉维夫

本地新闻

被人养的滋味,没有那么爽

家居要闻

72岁清洁工月入8500块住蜗居 厕所厨房挤在一起

王耀庆恶搞GQ封面 演技感人