PRC绕不开的序列化与反序列化

820 阅读1分钟

任何知识点,思路和思考比结论更重要;

  1. rpc 序列化与反序列化

< 什么是序列化和反序列化?

1.1 其他数据格式和二进制的相互转化

< 为什么需要序列化? 在网络传输过程中都是以二进制传输的,所以需要把其他数据格式转化为二进制字节 例如把对象转化为字节数组; 因此涉及到系统网络传输必然绕,像db存储数据文件,数据结果上是b+或者hash,但存储的硬盘还是都需要转化成二进制字节的;

举例:

User user= new User(); user.setAge(18); user.setName("zjp");

类似于 (分组转化类名成字节,各个字段的字节数组,拼接在一起成一个新的字节数)

index name byteLength key length value length

0 user 4

1 name 4 name 4 zjp 3

2 age 3 age 3 18 4

看下jdk的序列化结果:

可以看到思路都是结果是这样的

< 有哪些序列化工具

1.2 常见序列化工具

1.1 xml 和json 比较常用 例如redis-> client.set("key",JSON.toJsonString(user))

1.2 protoBuf google出品必属精品 :优点:跨平台与语言无关

1.3 java object serialnation

据统计参考:使用三种序列化工具 序列化100w对象存储到redis 耗时如下

以上统计信息读者可以自己实验一把。 xml 和json 在速度、效率、空间上并不是最优,数据结构化,可读性比较好; protoBuf 侧重数据序列化,非结构化,可读性比较差

任何知识点,思路和思考比结论更重要;