`

Google protobuf使用向导

    博客分类:
  • Java
阅读更多

本向导讲解了如下内容:

1、在一个.proto文件中定义一个信息格式..

2、使用protocl命令进行编译,生成java代码.

3、使用Java protocol buffer API进行读写操作.

 

以一个地址本为例,从建立一个.proto文件开始,为你想序列化的数据接口加入一个message属性,在message里面,为每一个字段指定名称和类型,下面是一个例子:

package tutorial;

option java_package = "com.example.tutorial";
option java_outer_classname = "AddressBookProtos";

message Person {
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phone = 4;
}

message AddressBook {
  repeated Person person = 1;
}

 正如你看到的,语法类似于c++和Java,下面我们来看看每个部分的意义:

 

 为了避免命名冲突,.proto文件以包声明开始,在java中,除了特别指定一个java_package属性,否则包名一般为Java的包.正像上面的例子.虽然提供了java_package属性,你通常还是应该定义package属性以避免在Protocol Buffers中命名冲突.包声明以后,有两个Java属性:java_package和java_outer_classname.java_package表示生成的Java代码的包,如果没有指定,编译器会根据package属性确定包名..


java_outer_classname属性定义文件中包含的类名.如果没有指定,会根据文件名进行转换,例如:"my_proto.proto"缺省会使用MyProto作为外部类名.

 

下一步,需要定义message属性,一个message是包含了各种类型字段的聚集.有很多标准的变量类型可以使用,包括:bool,int32,float,double和string.你也可以使用其

他的message属性作为字段类型,正像例子中的Person包含了PhoneNumber,而AddressBook包含了Persion,你甚至可以在message内部定义message,例如:PhoneNumber就是在Persion里面定义的.你还可以定义enum类型,正像指定电话号码类型的MOBILE,HOME,WORK..

 

The " = 1", " = 2" markers on each element identify the unique "tag" that field uses in the binary encoding. Tag numbers 1-15 require one less

byte to encode than higher numbers, so as an optimization you can decide to use those tags for the commonly used or repeated elements, leaving

tags 16 and higher for less-commonly used optional elements. Each element in a repeated field requires re-encoding the tag number, so repeated

fields are particularly good candidates for this optimization.
里面的"=1","=2"的唯一标记用于二进制编码,1-15
(上面一段应该是效率的体现,设置编码的,需要在研究一下.)

 

每个字段必须提供一个修饰词:
1、required: 表示字段必须提供,不能为空.否则,message会被认为是未初始化的,识图build为初始化的message会抛出RuntimeException,解析未初始化的message会抛出IOException..除此之外,一个required字段与optional字段完全相同.


2、optional:可选字段,可以设置也可以不设置.如果没有设置,会设置一个缺省值.你可以指定一个缺省值,正像电话号码的type字段,否则,使用系统的缺省值:数字类型缺省为0,字符类型缺省为空串,逻辑类型缺省为false.对于嵌入的message,缺省值通常是message的实例或原型.


3、repeated:字段可以被重复(包括0),可以同于动态大小的数组.

 

编译Protocol Buffers文件
protoc -I=$SRC_DIR --java_out=$DST_DIR addressbook.proto
$DST_DIR:生成的java代码的文件夹
编译成功后,会在指定的目录下生成Java代码文件,包含了对属性的操作,下一步就可以通过API进行数据的读写了...

 

下面的内容还没有看完,下回继续..

 

分享到:
评论

相关推荐

    Google ProtoBuf 使用说明

    Google ProtoBuf 安装使用说明

    google protobuf使用的简单介绍.pptx

    google protobuf的简单实用方法,主要用于向他人介绍。 可以用于数据传输和单元测试中 google protobuf的简单实用方法,主要用于向他人介绍。 可以用于数据传输和单元测试中

    google protobuf 最新源代码

    google protobuf 最新源代码google protobuf 最新源代码google protobuf 最新源代码google protobuf 最新源代码google protobuf 最新源代码google protobuf 最新源代码google protobuf 最新源代码google protobuf ...

    google protobuf的应用

    服务器端与客户端通信,使用google protobuf作为交互数据的序列化工具,其中客户端使用select机制实现I/O复用,服务端使用epoll机制,提高并发连接时的处理效率。软件环境:linux。文件dealpack.cc是服务端和客户端...

    Java protobuf框架使用向导ProtoBuf

    Java protobuf框架使用向导ProtoBuf,全称是Protocol Buffers, 它是谷歌内部用的一种高效的、可扩展的对结构化数据进行编码的格式规范。谷歌自己内部很多程序之间的通信协议都用了ProtoBuf

    Windows环境使用google protobuf实现简单的例子

    windows下vs环境对protobuf的简单应用,所用vs版本2010,protobuf版本protobuf-2.5.0

    protobuf 使用简单示例

    Protocol Buffers是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。它不依赖于语言和平台并且可扩展性极强。现阶段官方支持C++、JAVA、Python等三种编程语言...

    Protobuf使用手册.doc

    protobuf使用手册,包含protobuf的常见使用方法、内部原理实现的介绍、使用经验建议等。分别介绍了protobuf在c++、python、java的使用。

    google protobuf C教程

    google protobuf C教程,主要实现将google protobuf移植到32位单片机的教程。

    google protobuf

    google protobuf库文件,编译方法,及使用 google protobuf学习笔记一:windows下环境配置

    google protobuf socket python example

    使用google protobuf通过TCP传输文件

    Java_protobuf框架使用向导

    ProtoBuf,全称是Protocol Buffers, 它是中软卓越内部用的一种高效的、可扩展的对结构化数据进行编码的格式规范。中软卓越自己内部很多程序之间的通信协议都用了ProtoBuf...该文档主要介绍了Java_protobuf框架的使用。

    google protobuf 源代码

    google protobuf对协议内容进行了编码和压缩,对协议安全很有意义

    google protobuf-2.4.1

    google protobuf-2.4.1

    java开发Google protobuf 3.2.0 jar包 protobuf-java-3.2.0.jar

    你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。 protobuf-java-3.2.0.jar包 太难找了,只能是自己发布一个jar包 特此分享出来

    google protobuf 2.6.0

    google protobuf 2.6.0源文件可直接编译使用!!!!!!!!!!!!!!!!!!!!!

    protoBuf使用demo

    protoBuf Java语言使用demo

    google protobuf-3.2.0 windowsprotoc3.2.0.exe

    google protobuf-3.2.0 protoc3.2.0.exe

Global site tag (gtag.js) - Google Analytics