文章目录
  • 一、普通的序列化方式(bean对象有直接的java类)
  • 1.1 普通的java io byteArray输入输出流的序列化方式
  • 1.2 xml序列化方式(xml用来做配置文件,这样序列化出来长度很大)
  • 1.3 Hessian序列化方式(这个Dubbo中使用的序列化方式)
  • 1.4 Json序列化方式(json用来网络传输,序列化可以很小)
  • 二、高级的序列化方式(bean对象没有直接的java类)
  • 2.1 protobuf序列化(谷歌开发的序列化方式,需要.proto文件生成java类)
  • 2.2 avro序列化(需要.avsc文件生成java类)
  • 三、小结(六种序列化方式)


本文源代码:https://www.syjshare.com/res/NVUD29PW

一、普通的序列化方式(bean对象有直接的java类)

1.1 普通的java io byteArray输入输出流的序列化方式

  • java io 序列化和反序列化
  • 优点:简单,直接使用 java io ByteArrayOutputStream byte数组输入输出流
  • 确定:序列化出来的byte[]数组很大

1.2 xml序列化方式(xml用来做配置文件,这样序列化出来长度很大)

  • xml 序列化,只需要序列化和反序列对齐就好
  • 优点:序列化为xml
  • 缺点:需要额外引入依赖

Netty_05_六种序列化方式(JavaIO序列化 XML序列化 Hessian序列化 JSON序列化 Protobuf序列化 AVRO序列化)(实践类)_序列化

Netty_05_六种序列化方式(JavaIO序列化 XML序列化 Hessian序列化 JSON序列化 Protobuf序列化 AVRO序列化)(实践类)_java_02

1.3 Hessian序列化方式(这个Dubbo中使用的序列化方式)

  • Dubbo Hessian (在Dubbo中使用的序列化方式)
  • 优点:序列化出来的byte[]数组比 java io byteArray输入输出流的要小
  • 缺点:需要额外引入依赖

Netty_05_六种序列化方式(JavaIO序列化 XML序列化 Hessian序列化 JSON序列化 Protobuf序列化 AVRO序列化)(实践类)_序列化_03

Netty_05_六种序列化方式(JavaIO序列化 XML序列化 Hessian序列化 JSON序列化 Protobuf序列化 AVRO序列化)(实践类)_json_04

Netty_05_六种序列化方式(JavaIO序列化 XML序列化 Hessian序列化 JSON序列化 Protobuf序列化 AVRO序列化)(实践类)_xml_05

1.4 Json序列化方式(json用来网络传输,序列化可以很小)

  • json序列化方式
  • 优点:序列化出来的json字符串长度很小,比xml序列化的小太多 (json用于网络传输,xml用于配置文件) (但springboot配置中,用注解取代了xml配置)
  • 缺点:需要引入fastjson依赖

需要引入fastjson依赖

Netty_05_六种序列化方式(JavaIO序列化 XML序列化 Hessian序列化 JSON序列化 Protobuf序列化 AVRO序列化)(实践类)_json_06

Netty_05_六种序列化方式(JavaIO序列化 XML序列化 Hessian序列化 JSON序列化 Protobuf序列化 AVRO序列化)(实践类)_序列化_07


Netty_05_六种序列化方式(JavaIO序列化 XML序列化 Hessian序列化 JSON序列化 Protobuf序列化 AVRO序列化)(实践类)_json_08

二、高级的序列化方式(bean对象没有直接的java类)

2.1 protobuf序列化(谷歌开发的序列化方式,需要.proto文件生成java类)

  • protobuf序列化 (google公司开发)
  • 优点:比json序列化更小,更方便网络传输
  • 缺点:需要引入protobuf依赖,需要 .proto 文件生成 .java 类

Netty_05_六种序列化方式(JavaIO序列化 XML序列化 Hessian序列化 JSON序列化 Protobuf序列化 AVRO序列化)(实践类)_序列化_09


Netty_05_六种序列化方式(JavaIO序列化 XML序列化 Hessian序列化 JSON序列化 Protobuf序列化 AVRO序列化)(实践类)_java_10

Netty_05_六种序列化方式(JavaIO序列化 XML序列化 Hessian序列化 JSON序列化 Protobuf序列化 AVRO序列化)(实践类)_java_11

2.2 avro序列化(需要.avsc文件生成java类)

Netty_05_六种序列化方式(JavaIO序列化 XML序列化 Hessian序列化 JSON序列化 Protobuf序列化 AVRO序列化)(实践类)_xml_12

Netty_05_六种序列化方式(JavaIO序列化 XML序列化 Hessian序列化 JSON序列化 Protobuf序列化 AVRO序列化)(实践类)_json_13


Netty_05_六种序列化方式(JavaIO序列化 XML序列化 Hessian序列化 JSON序列化 Protobuf序列化 AVRO序列化)(实践类)_json_14

三、小结(六种序列化方式)

  • java io 序列化和反序列化
    优点:简单,直接使用 java io ByteArrayOutputStream byte数组输入输出流
    确定:序列化出来的byte[]数组很大
  • xml 序列化,只需要序列化和反序列对齐就好
    优点:序列化为xml
    缺点:需要额外引入依赖
  • Dubbo Hessian (在Dubbo中使用的序列化方式)
    优点:序列化出来的byte[]数组比 java io byteArray输入输出流的要小
    缺点:需要额外引入依赖
  • json序列化方式
    优点:序列化出来的json字符串长度很小,比xml序列化的小太多 (json用于网络传输,xml用于配置文件) (但springboot配置中,用注解取代了xml配置)
    缺点:需要引入fastjson依赖
  • protobuf序列化 (google公司开发)
    优点:比json序列化更小,更方便网络传输
    缺点:需要引入protobuf依赖,需要 .proto 文件生成 .java 类
  • Avro序列化
    优点:比json序列化更小,更方便网络传输
    缺点:需要引入avro依赖,需要 .avro 文件生成 .java 类

最后,简单的方式中,最小的序列化方式就是json了,不需要生成.java类

本文源代码:https://www.syjshare.com/res/NVUD29PW