Hessian、Kryo、Protostuff序列化使用区别

  1. Kryo序列化后的数据相比Hessian小很多。
  2. Hessian使用固定长度存储int和long,而kryo使用变长的int和long保证这种基本数据类型序列化后尽量小,实际应用中,很大的数据不会经常出现。
  3. Kryo进行序列化的时候,需要传入完整类名或者利用 register() 提前将类注册到Kryo上,其类与一个int型的ID相关联,序列中只存放这个ID,因此序列体积就更小,而Hessian则是将所有类字段信息都放入序列化字节数组中,直接利用字节数组进行反序列化,不需要其他参与,因为存的东西多处理速度就会慢点。
  4. Kryo使用不需要实现Serializable接口,Hessian则需实现。
  5. Kryo数据类的字段增、减,序列化和反序列化时无法兼容,而Hessian则兼容,Protostuff是只能在末尾添加新字段才兼容。
  6. Kryo和Hessian使用涉及到的数据类中必须拥有无参构造函数。
  7. Hessian会把复杂对象的所有属性存储在一个Map中进行序列化。所以在父类、子类存在同名成员变量的情况下,Hessian序列化时,先序列化子类,然后序列化父类,因此反序列化结果会导致子类同名成员变量被父类的值覆盖。
  8. Kryo不是线程安全的,要通过ThreadLocal或者创建Kryo线程池来保证线程安全,而Protostuff则是线程安全的。
  9. Protostuff和Kryo序列化的格式有相似之处,都是利用一个标记来记录字段类型,因此序列化出来体积都比较小。
    Hessian、Kryo、Protostuff序列化使用区别_第1张图片 Protostuff字段序列化格式
    综合来看,Protostuff使用优势更突出,关于Protostuff的具体实战使用可以参考本人另一篇:给Protostuff序列化的每行代码打上注释你就懂了

你可能感兴趣的:(JAVA,kryo,hessian,java,protobuf)