1)什么是序列化和反序列化?
(1)数据结构要存储,传送使用,数据结构,数据对象里面的内容-->编码-->二进制
(2)存入文件,网络发送
(3)使用: 根据这个数据重建这个对象,初始化这个对象的每个数据成员-->解码
例子: class{string uname; string upwd;} -->["uname" + [upwd]]
等你重建这个: new一个对象,你再从二进制里面将uname、upwd读出来
目的: 存入文件、网络传送
JSON: 对象的数据编码为JSON字符串(二进制),根据JSON字符串来解出我们的对象;
XML: 对象的数据编码成XML, 解码根据XML来将新对象的数据初始化好;
PROTOBUF: 二进制编码(不是人类可读的文本),编码解码更高效、安全、体积更小
2)Protobuf是什么?
(1)二进制编码 class{string uname; string upwd;} [长度, 0xxx, 0xxx, 0xxx]
文本<uname>blake</uname>
因此自己要定义一个规则,谁是uname,谁是upwd
每个对象都要有一个这样的规则(编码解码的规则, 这个规则叫做协议, json、xml这些是通用的协议):
编码函数: 把uname放在第一位, upwd放在第二位--》【0xxx, 0xxx】
解码函数: 吧第一个作为uname,第二个作为upwd
优点:编码解码高效、体积小、安全
缺点: 每个协议都要有自己的编码解码函数,每个协议都要写
(2)google protobuf做了哪些事情:
1:制定对象的协议内容:
第1个字段:是什么类型的什么名字
第2个字段: 什么类型什么名字
第3个字段: 什么类型什么名字是否是必须的
message: 数据对象
required: 这个字段是必须要有值的
int32 string: 类型
xxx: 名字
2:protobuf给我们提供了一个工具:protoc.exe,协议.proto文件编译器:
根据协议文件为每个对象生成我们对应的编码解码函数或对象
3: gogole protobuf工具,根据协议来生成,各种不同语言版本的编码解码函数或对象,主流的编程语言都支持
4:为每种编程语言提欧共了一个runtime的环境库:
Java如何编码一个String到二进制
java 如何编码int到二进制
对象再复杂,其实就是把每个基本的数据的编码和解码做好了
使用的时候,内置runtime库,就可以驱动这些自动生成的对应的协议对应的代码
3)JProtobuf如何使用(Java代替proto文件)
(1)
(2)
(3)
(4)
来源:oschina
链接:https://my.oschina.net/u/4283847/blog/3229203