美文网首页
protobuf笔记

protobuf笔记

作者: 林桉 | 来源:发表于2020-04-06 14:56 被阅读0次

protobuf是一种基于二进制的协议,它能够非常快速高效的序列化数据,考虑之前的xml,但是它的体积要比xml小的多得多。当然使用它还有其他非常之多的理由。我们考虑java的情况,传统的序列化方法就是实现Serialization,不过它带来非常之多的烦恼,比如版本兼容,这会带来非常之大的测试压力,且它的处理完的数据并不能跨语言的分享啊,python or c++都不能够使用,这是很头疼的。除此之外,我们序列化数据的时候我们会使用一些ad-hoc way,比如会把数据都放在一个字符串里面,考虑有四个整形数据的例子:"12:3:-23:67",它显然是足够简单的,但是却需要手写一些解析,编码代码,并且,还有一些运行时损耗。再后者,我们可能会想到使用xml,显然它是不太好的,不然也就没有json了。

1 定义.proto文件,用来定义你的数据结构

2 使用protoc编译器进行编译,导出java代码

3 使用java api进行数据的读写
平台无关,语言无关,可扩展;
提供了友好的动态库,使用简单;
解析速度快,比对应的XML快约20-100倍;
序列化数据非常简洁、紧凑,与XML相比,其序列化之后的数据量约为1/3到1/10。

1 . proto.proto 转 proto.java

image.png
  protoc --java_out ./ ./PayInfo.proto

2 . pb反射

3 . 编程规范

  • 定义一个消息类型
message SearchRequest {
  required string query = 1;
  optional int32 page_number = 2;
  optional int32 result_per_page = 3;
}
  • 指定字段规则
    required:一个格式良好的消息一定要含有1个这种字段。表示该值是必须要设置的;
    optional:消息格式中该字段可以有0个或1个值(不超过1个)。
    repeated:在一个格式良好的消息中,这种字段可以重复任意多次(包括0次)。重复的值的顺序会被保留。表示该值可以重复,相当于java中的List。

required是永久性的:在将一个字段标识为required的时候,应该特别小心。如果在某些情况下不想写入或者发送一个required的字段,将原始该字段修饰符更改为optional可能会遇到问题——旧版本的使用者会认为不含该字段的消息是不完整的,从而可能会无目的的拒绝解析。在这种情况下,你应该考虑编写特别针对于应用程序的、自定义的消息校验函数。

  • 添加更多消息类型
message SearchRequest {
  required string query = 1;
  optional int32 page_number = 2;
  optional int32 result_per_page = 3;
}

message SearchResponse {
 ...
}
  • 标量数值类型


    image.png
    image.png
  • Optional的字段和默认值

如上所述,消息描述中的一个元素可以被标记为“可选的”(optional)。一个格式良好的消息可以包含0个或一个optional的元素。当解 析消息时,如果它不包含optional的元素值,那么解析出来的对象中的对应字段就被置为默认值。默认值可以在消息描述文件中指定。例如,要为 SearchRequest消息的result_per_page字段指定默认值10,在定义消息格式时如下所示:

optional int32 result_per_page = 3 [default = 10];

4 . 实例

参考:

https://blog.csdn.net/u013022222/article/details/50521835
安装:https://blog.csdn.net/xxjuanq_only_one/article/details/50465272
https://www.cnblogs.com/NeilZhang/p/8410589.html
https://blog.csdn.net/boshuzhang/article/details/73740470
http://ju.outofmemory.cn/entry/109294

相关文章

  • Google Protocol buffer 学习笔记.上篇-简

    本次分上下两篇简单记录自己对protobuf协议的学习笔记, 上篇简单介绍protobuf, 记录了ubuntu系...

  • protobuf笔记

    protobuf是一种基于二进制的协议,它能够非常快速高效的序列化数据,考虑之前的xml,但是它的体积要比xml小...

  • ProtoBuf 的java使用

    碰巧用到Proto,算是笔记吧算是笔记吧,windows :1,两个文件:proto.exe, protobuf...

  • Protobuf 学习笔记

    文章内容源自Google官方文档翻译,详见原文Language Guide。部分内容可能重复,望多见谅。 假设你想...

  • mac上安装Protobuf

    为什么要安装protobuf 什么是protobuf 怎么判断有没有安装过protobuf? 安装protobuf...

  • protobuf使用

    protobuf的使用 protobuf .proto文件 idea安装protobuf插件 syntax = ...

  • Google Protocol Buffers 数据交换协议

    protobuf 简介 protobuf是什么 protobuf(Protocol Buffers)是Google...

  • protobuf

    protobuf是什么#### protobuf是"Protocol Buffers"的简称。protobuf是一...

  • 微服务项目讲解

    内容目录如下: 什么是微服务? RPC 协议 ProtoBuf 使用protobuf 简单语法Protobuf 高...

  • 在Windows下使用Protobuf的示例

    在Windows下使用Protobuf的示例 摘要 Protobuf全称为Google ProtoBuf,它是由G...

网友评论

      本文标题:protobuf笔记

      本文链接:https://www.haomeiwen.com/subject/jvhdectx.html