作用
把某种数据结构的信息,以某种格式保存起来,并指定了数据类型、数据属性名字。最后实现将复杂数据结构序列化为二进制数组,非常适合网络传输等领域。
使用方法
比如模块A要传给模块B数据,而且该数据有一定的属性、结构等,可以通过一下方式:
1.编写proto文件,描述出数据结构;
2.通过protobuf内置编译器把proto文件转为一个java的包装类;
3.编写java代码来序列化或解析该包装类。
4.发送方调用某种socket的通讯库把序列化之后的字符串发送出去;
5.接收方先通过网络通讯库接收到数据,存放到某字符串,之后解析该字符串。
特点
性能好,效率高(xml的解析即反序列化开销大);
代码生成机制,数据解析类自动生成;
支持多种语言。
缺点
应用不广范;
二进制格式导致可读性差;
缺乏自描述(而xml这点就比较好)。
关键字
modifiers
1 required 不可以增加或删除的字段,必须初始化,否则会导致对象创建不成功
2 optional 可选字段,可删除,可以不初始化
3 repeated 可重复字段, 对应到java文件里,生成的是List
Message
在proto文件里,数据的协议时以Message的形式表现的。
Build
生成具体的java类时,例如Person.java,同时会存在build方法。文档的意思是对于转化后的数据,具有唯一性,build提供了便利的方法来初始化这些数据。