反序列化速度慢_避免使用Java序列化

e57759a33d252f3154d01b1544c8ee55.png

c5d56fbc8cfc45d8cb7e1858c0b21b1c.png

8cb9d4942e85aef62c8d5ac41a75508c.png

0612eb1001eb89f4e5e56a3f66b5afda.png

861f49fce7dd506a2ed28bec564590bd.png

6bc067c5a3984c6629f3c46100210a36.png

b19a7d3ac58d3581bde3dcaba3981c89.png

9b35eedc135893c488bb904d77ecff30.png

下面我们就一起来看看 JDK 默认的序列化到底存在着哪些缺陷:

1. 无法跨语言

Java 序列化目前只适用基于 Java 语言实现的框架,其它语言大部分都没有使用 Java 的序列化框架,也没有实现 Java 序列化这套协议。因此,如果是两个基于不同语言编写的应用程序相互通信,则无法实现两个应用服务之间传输对象的序列化与反序列化。

2. 易被攻击

Java 官网安全编码指导方针中说明:“对不信任数据的反序列化,从本质上来说是危险的,应该予以避免”。可见 Java 序列化是不安全的。

3. 序列化性能太差

序列化的速度也是体现序列化性能的重要指标,如果序列化的速度慢,就会影响网络通信的效率,从而增加系统的响应时间。我们再来通过下面这个例子,来对比下 Java 序列化与 NIO 中的 ByteBuffer 编码的性能:

Java 序列化

9790e22bda49dedc28cc523d3f9af4c0.png

ByteBuffer

bf1a546771b26f017566c617d833ee3b.png

运行结果:

ObjectOutputStream 序列化时间:38 ByteBuffer 序列化时间:7

通过以上案例,我们可以清楚地看到:Java 序列化中的编码耗时要比 ByteBuffer 长很多

2402e8976839af0d819d5bc5ea307e5a.png

da5ef6206e0ec4bd81aef9da0a5be546.png

01d43c2ca3dcf591ab89a9d456a3afe5.png
既然来了,点个关注再走呗~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值