上一篇 挖的坑里提到过想用 Google 的 Protocol Buffer 替换掉 Java 原生的序列化机制. 作为 "学究派", 原来是想对两者先做一个比较分析的.
过程中, 无意看到一篇博客上提到 Joshua Bloch(《Effective Java》的作者) 建议不要再使用 Java(原生的) 序列化机制.
特地翻了下《Effective Java》的第三版, 在 ITEM85 中有这样一句:
There is no reason to use Java serialization in any new system you write.
之前对于原生序列化机制性能低下的理解还停留在:
它会携带类本身的信息.
如果父类也实现了序列化, 则会携带父类相关的信息.
如果引用了某些对象, 则引用对象也会被序列化.
而 Bloch 的例子里: 待序列化的对象仅包含 201 个 HashSet 实例对象, 每个实例对象仅包含 3 个或者更少的对象引用. 序列化后的结果字节流达到了 0.5M. 反序列化时候, 甚至需要计算 2 的 100 次 hashcode.
戏谑一点的说 "知道它烂, 但不知道它这么烂". 因此也就没有再做对比分析的必要了.
不过 Protocol Buffer 确实不太容易上手, 不仅有不少概念, 连使用层面也没有 fastjson 这样的第三方库. 等下一篇来填吧.
来源: http://www.jianshu.com/p/234bda14fb81