下面我们就一起来看看 JDK 默认的序列化到底存在着哪些缺陷:
1. 无法跨语言
Java 序列化目前只适用基于 Java 语言实现的框架,其它语言大部分都没有使用 Java 的序列化框架,也没有实现 Java 序列化这套协议。因此,如果是两个基于不同语言编写的应用程序相互通信,则无法实现两个应用服务之间传输对象的序列化与反序列化。
2. 易被攻击
Java 官网安全编码指导方针中说明:“对不信任数据的反序列化,从本质上来说是危险的,应该予以避免”。可见 Java 序列化是不安全的。
3. 序列化性能太差
序列化的速度也是体现序列化性能的重要指标,如果序列化的速度慢,就会影响网络通信的效率,从而增加系统的响应时间。我们再来通过下面这个例子,来对比下 Java 序列化与 NIO 中的 ByteBuffer 编码的性能:
Java 序列化
ByteBuffer
运行结果:
ObjectOutputStream 序列化时间:38 ByteBuffer 序列化时间:7
通过以上案例,我们可以清楚地看到:Java 序列化中的编码耗时要比 ByteBuffer 长很多
既然来了,点个关注再走呗~