Java 对象要在网络上传输或者存储就需要进行序列化,而 Java 的序列化从以下两个方面表现都比较差:
- 对象序列化后的码流大小,很大。
- 对象序列化的性能(比如序列化耗费时间很长[相比二进制]) 很差。
有没有可以替代的编解码框架,当然有:
1.Google 的 Protobuf
将数据结构以.proto 文件进行描述,通过代码生成工具可以生成对应数据结构的 POJO 对象和 Protobuf 相关的方法和属性,特点如下:
a. 结构化数据存储格式(XML, JSON 等)
b. 高效的编解码性能
c. 语言无关、平台无关、扩展性好;
d. 官方支持 java\c++ 和 python 三种语言。
protobuf 使用二进制编码,在空间和性能上具有更大的优势。
- Facebook 的 Thrift
支持 C++\C#\Cocoa, erlang, haskell , java, ocami, perl, php, python, ruby 和 smalltalk.
thrift 适用于静态的数据交换,需要先确定好它的数据结构,当数据结构发生变化时,必须重新编辑 IDL 文件,生产代码和编译,这一点跟其他 IDL 工具相比可以视为 Thrift 的弱项。
Thrift 通过 IDL 描述接口和数据结构定义,它支持 8 中 Java 基本类型、Map、Set、和 List,支持可选和必选定义,功能非常强大,以为可以定义数据结构中字段的顺序,所以它也支持协议的前向兼容。
3.JBoss Marshalling
修正了 jdk 自带的序列化包的很多问题,是可插拔的类解析器,通过一个接口即可实现定制。
可插拔的对象替换技术,不需要通过集成的方式.
无需实现 java.io.Serializable 接口,即可实现 java 序列化.
通过缓存技术提升对象的序列化性能。
相比于签名两种编解码框架,JBoss Marshalling 更多是在 JBoss 内部应用,应用范围有限。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于