经过网上资料查证以及自身实际测试,对比了一下几种序列化方式:java序列化、json、avro、kryo、protobuff、protostuff,对5144条6KB左右数据进行测试结果
序列化工具 |
序列化时间(ms) |
反序列化时间(ms) |
平均每条记录大小(byte) |
java序列化 |
225 |
238 |
6324 |
json |
6831 |
4629 |
21444 |
avro |
434 |
509 |
5995 |
kryo |
171 |
76 |
5998 |
Protobuff |
62 |
43 |
6005 |
Protostuff |
52 |
50 |
6005 |
从上述表格可以得出,除json外,其他序列化工具序列化后数据大小差距不大,但序列化/反序列化耗时上protobuff/protostuff有明显优势。故序列化框架在protobuff和protostuff中进行选择。
Protostuff是基于Google protobuff技术的Java版本,直接使用原生的protobuff是需要数据结构的预编译过程,需要编写.proto格式的配置文件,再通过protobuff提供的工具翻译成目标语言代码,而Protostuff动态支持了protobuff的预编译的过程,可以直接使用普通java POJO进行序列化,简化编码。
经过实测序列化性能相对原生protpbuff没有影响。
由于Protostuff只支持Java实现,不过并未对序列化格式有做任何修改,所以Protostuff和protobuff可以共同使用。