再见!Fastjson!

news2024/7/7 16:07:15

你为何仍用Fastjson?

原因可以说出5678种,总而言之言而总之,你不(敢)切换的原因或许只有一个:Fastjson的静态方法调用用着省心;最重要的是,对其它JSON库(如Jackson/Gson)并不熟悉不敢切换。

我认为害怕来自于未知。

 

也可能你觉得Fastjson的速度快,我做了一个简单测试:

库名称

测试样例

序列化时间(ms)

反序列化时间(ms)

Fastjson

1万个JavaBean对象

125

135

Gson

1万个JavaBean对象

150

145

Jackson

1万个JavaBean对象

135

130

Fastjson

1万个简单的JSON对象

115

130

Gson

1万个简单的JSON对象

130

140

Jackson

1万个简单的JSON对象

120

125

测试结果表明,Fastjson的序列化和反序列化性能略优于其他两个库,但差距并不大。

可能速度的确快那么一丢丢,但是再生产中,又有多少业务是海量数据或者说需要fastjson来处理呢?

换句话说,既然差异性这么小,Fastjson一味的强调它是最快的真的有意义吗?

正文

坊间在某坛里看到这样一句言论:若你还依赖于使用Fastjson,那么你大概率还只是初/中级水平。这句话必然让Fastjson的忠实用户火冒三丈,抄起家伙嘎嘎就是干。话出必然有因,那么这句话是否真的言过于词呢?接下来就絮叨絮叨

安全漏洞

Fastjson在处理JSON字符串时,存在一些安全漏洞。例如,Fastjson中的反序列化漏洞可能会导致远程代码执行,这意味着攻击者可以利用漏洞远程执行恶意代码,从而危及应用程序和用户的安全。

 

此外,Fastjson在处理非标准JSON格式时也容易受到攻击。攻击者可以通过构造特定的JSON字符串来绕过Fastjson的解析和验证,从而导致安全问题。

不易于调试和排错

Fastjson在解析和序列化JSON数据时,可能会出现一些错误,而这些错误很难被发现和排除。由于Fastjson的错误消息很难理解,因此,当出现错误时,开发人员可能需要花费更多的时间来调试和排错。

相比之下,其他JSON库(例如Jackson)提供了更详细和易于理解的错误消息,这使得调试和排错变得更加容易。

代码质量和可维护性

Fastjson的代码质量和可维护性也是一些开发人员放弃它的原因。Fastjson的代码中存在大量的重复代码和复杂的逻辑,这使得它难以维护和扩展。这也意味着,当您需要进行一些自定义的序列化和反序列化时,您可能需要编写更多的代码,从而增加了代码的复杂性和维护难度。

相比之下,其他JSON库(例如Jackson)采用了更简洁和模块化的代码结构,这使得它更易于维护和扩展。

结语

在工具选择上从来都没有最合适,只有更合适,这是一个仁者见仁智者见智的问题,至少单从安全性这一角度来说,Fastjson已经输了,写这篇文章的目的只是为了记录Fastjson曾经辉煌的历史和存在问题,并不是为了和大家抬杠。同样的,Fastjson还是Jackson也就没有标准的答案,各位还是结合自己的具体情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/718390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【生活分享】《哈姆雷特》· 苏州站 - 一次有趣的音乐剧体验

平时博客里大部分都是写技术相关的文章,感觉内容还是比较单一的,也想分享一下最近的一些有趣的生活~ 6月30号的时候,便订好了徐俊导演编排的7月2号场《哈姆雷特》音乐剧。而实际上,苏州场7月1号就上映了,感觉那天太晚……

C++图形开发(6):落下后能弹起的小球

文章目录 1.重复下落的小球2.落下后能弹起的小球3.能上下反弹的小球4.符合重力的能上下反弹的小球 今天我们来尝试实现一个落地后可以弹起的小球 1.重复下落的小球 首先,我们要来实现一个小球的重复下落 我们知道,在前面的代码中(详见C图形…

云his源码:医疗卫生信息系统

伴随着以5G、云计算、大数据、人工智能和物联网等新兴技术的发展,医疗行业也呈现了数字化的发展趋势。如何让医疗领域中的服务提供方、需求方、支付方以及供应链等参与方实现业务协同及数据协同,是目前医疗行业所需的能力。 HIS系统,即“医疗…

点云数据分类及滤波方法

如何获取点云数据 传统的点云获取技术包括非接触式测量和接触式测量两种,它们的主要区别在于,在测量过程中测头是否与工件的表面相接触。 非接触式测量是利用光学原理的方法采集数据,例如结构光法、测距法以及干涉法等。该方法的优点在于测…

vue项目中的vue.config.js配置文件中的proxy代理post一直在预检

记录一个比较有意思的bug,帮别人调试遇到的,一个哥们一直在群里问了好几次同一个问题了,他配置了代理,请求一直在发送,postman测试没问题,可以成功接收到,但是在项目前端请求,确实一点响应没有&…

黑芝麻智能科技、上海紫先面试(部分)(未完全解析)

黑芝麻智能科技 Hystrix可以限流吗?客户端限流,是限制对下游(被调用方)的访问,不是对本服务限流。从HystrixCommand的.withExecutionIsolationStrategy(ExecutionIsolationStrategy.SEMAPHORE)也可以看出来&#xff0c…

C++ -- 异常

文章目录 1. C语言传统处理2. C异常概念3. 异常的使用3.1 异常抛出并没有被捕获3.2 正确使用3.3 捕获异常采用类型匹配就近原则3.4 catch(...)可以捕获任意类型异常3.5 抛出派生类对象使用基类捕获3.6 异常重新抛出3.7 匹配规则3.8 异常规范3.9 异常安全 4. 自定义异常体系5. 异…

05.动态协议OSPF基础

文章目录 **OSPF简介****OSPF和RIP的区别****RIPV2和OSPFV2相同点****不同点** OSPF基础概念OSPF区域OSPF路由类型区域划分的要求**OSPF多区域****Router ID****Router ID选取规则****度量值** OSPF数据包OSPF状态机条件匹配 OSPF的工作过程OSPF基本配置**OSPF的拓展配置** OSP…

番外12:获取晶体管漏极电流源平面的仿真波形

番外12:获取晶体管漏极电流源平面的仿真波形 老是有同学反应,仿真中无法获取漏极电流源平面的仿真波形,在此给出解释与解决办法。 1、ADS能够访问到部分器件的电流源平面波形 对于某些器件,比如说CGH40010F,可以在仿…

硬核了解一下内核链表

一,内核链表定义 言以蔽之,内核链表就是个带头结点的循环双链表。 普通的链表是将next指针定义成为与该结构体一样的类型,这样做通用性不好。与普通的链表的定义和使用方式不一样,内核的链表定义成为了一种通用的结构&#xff1a…

vue打包到生产环境

1.进入到项目根目录执行 npm run build此时会自动打包在dist目录下 2.安装服务 npm install -g serve3.启动 serve dist以上是生产环境打包的过程。 npm run dev 是开发环境, npm run build 是生产环境

Springboot 错用list.stream , 遭遇list浅拷贝偷袭,实战图解

前言 相信很多看客都听闻过深拷贝、浅拷贝 , 但是在日常使用的过程中,是否真的有关心过或者遭遇过呢? 不啰嗦,一起来看看。 正文 接下来我通过示例,来复现一下 list.stream浅拷贝 这个事 : 首先是一个对象…

Nacos服务注册成功,RestTemplate调用服务提供者时空指针异常(已解决)

发现问题并进行记录 目录 项目场景:问题描述原因分析解决 项目场景: RestTemplate也可以做服务调用(进行测试) 目的:解决该问题,不考虑其他远程调用方式(Fegin,Dubbo) 项目Pom文件 Spring Boot ----2.6.3 Spring Cloud------2021.0.1 Spring Cloud Al…

Elasticsearch介绍和安装

ELK简介 Elastic Stack核心产品包括Elasticsearch、Logstash、Kibana(也称为ELK)和Beats等等。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化 Kibana是一个免费且开放的用户界面,能…

Apikit 自学日记:可以对 API 发评论

该功能仅供API研发管理企业版 您可以直接在API文档上发布评论,所有的沟通内容都会跟随API文档保留下来并且按照版本分类好,而不是零散地存在各种聊天工具中。 发表评论 在API详情页,点击 评论 按钮,在弹窗中可以输入评论信息并点…

FPGA实验一:层次法设计组合电路(加法器)

目录 一、实验目的 二、实验要求 三、实验代码 四、实验结果及分析 1、引脚锁定 2、仿真波形及分析 3、下载测试结果及分析 五、实验心得 一、实验目的 (1)掌握基本组合逻辑电路的 FPGA实现; (2)学习 Verilo…

使用安装器安装windows gcc— MinGW及让windows像Linux一样的MSYS

这里使用installer进行安装GCC,主要是installer安装其它依赖,如MSYS,autoconf,automake,libtool,vim,perl,mingw-developer-toolkit等,mingw下载地址,如图download链接的mingw-get-setup.exe文件…

高级端口扫描工具

高级端口扫描程序可查看哪些服务在哪个端口上运行、开放端口数量、连接的交换机,并帮助保护网络免受未经授权的访问。作为网络管理员,扫描网络中的开放端口、这些端口已连接到的交换机以及在其上运行的服务,并将已知服务与已识别的服务与高级…

迁移学习入门,新手该如何下手?

推荐迁移学习技术的实用入门图书:《自然语言处理迁移学习实战》 [加纳] 保罗阿祖雷(Paul Azunre) 著,李想,朱仲书,张世武 译 一本书带你读懂ChatGPT背后的技术,自然语言处理迁移学习,解锁机器学…

Xcode Build System

Xcode Build System iOS开发者都使用Xcode来开发、编译程序,但是我们真正了解xcode是怎样编译我们的程序到手机上的么,下面我们主要看看xcode的编译系统内容 一、Preprocessor 预处理:在此步骤中xcode会处理代码中的宏,将其展开…