Java|几种Java常用序列化框架的选型与对比( 六 )


2易用性
下面是从API使用的易用性上面来对比各个序列化框架 , 可以说除了JDK Serializer外的序列化框架都提供了不错API使用方式 。
3可扩展性
下面是各个序列化框架的可扩展性对比 , 可以看到Protobuf的可扩展性是最方便、自然的 。 其它序列化框架都需要一些配置、注解等操作 。
4性能
序列化大小对比
对比各个序列化框架序列化后的数据大小如下 , 可以看出kryo preregister(预先注册序列化类)和Avro序列化结果都很不错 。 所以 , 如果在序列化大小上有需求 , 可以选择Kryo或Avro 。
序列化时间开销对比
下面是序列化与反序列化的时间开销 , kryo preregister和fst preregister都能提供优异的性能 , 其中fst pre序列化时间就最佳 , 而kryo pre在序列化和反序列化时间开销上基本一致 。 所以 , 如果序列化时间是主要的考虑指标 , 可以选择Kryo或FST , 都能提供不错的性能体验 。
5数据类型和语法结构支持
各序列化框架对Java数据类型支持的对比:
注:集合类型测试基本覆盖了所有对应的实现类 。
List测试内容:ArrayList、LinkedList、Stack、CopyOnWriteArrayList、Vector 。
Set测试内容:HashSet、LinkedHashSet、TreeSet、CopyOnWriteArraySet 。
Map测试内容:HashMap、LinkedHashMap、TreeMap、WeakHashMap、ConcurrentHashMap、Hashtable 。
Queue测试内容:PriorityQueue、ArrayBlockingQueue、LinkedBlockingQueue、ConcurrentLinkedQueue、SynchronousQueue、ArrayDeque、LinkedBlockingDeque和ConcurrentLinkedDeque 。
下面根据测试总结了以上序列化框架所能支持的数据类型、语法 。
注1:static内部类需要实现序列化接口 。
注2:外部类需要实现序列化接口 。
注3:需要在Lambda表达式前添加(IXxx & Serializable) 。
由于Protobuf、Thrift是IDL定义类文件 , 然后使用各自的编译器生成Java代码 。 IDL没有提供定义staic内部类、非static内部类等语法 , 所以这些功能无法测试 。
阿里云开发者社区
世界读书日 , 来读书吧
【Java|几种Java常用序列化框架的选型与对比】4月23日是第26个世界读书日 , 阿里云开发者社区推出“记录阅读之路 , 影响同行之人”活动 , 6位阿里技术人为同学们分享他们看过的好书 , 开发者藏经阁也推出了最受大家欢迎的电子书 。