Protocol buffers 快速入门(针对 Java 语言)


声明:本文转载自https://my.oschina.net/j4love/blog/1811486,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

写在前面

        在学习使用 protocol buffers 的时候一开始在网上找一些博客看,遇到的问题是很多博客写的并不清晰看了也是让人一头雾水,没法达到对 protocol buffers 快速上手使用的目的(完成一个 hello world)。然后通过官方文档学习后对 protocol buffers 有了大概的认识,也达到能够应用的程度。建议最好还是去看官网上的文档,描述的很详细。protocol buffers 官网(请科学上网)

 

Protocol Buffers 是什么?

        Protocol Buffers 简称 protobuf , 由 google 开源。是一中语言中立 , 平台中立 ,(不和特定的语言、操作系统绑定),对结构化数据进行序列化、反序列化的机制。类似于 XML , 比起 XML protobuf 的优点是 :数据占用空间小 , 传输速度快  ,使用起来简单 , 定义一次数据结构,生成指定语言的代码 (目前支持Java 、Python 、C++ 、Objective-C 、Go 、Ruby 、C# 、JavaScript 、PHP 、Dart )。 缺点是可读性不如 XML 。protobuf 不是好的面向对象的设计 , 不能发挥面向对象的特性 , 不应该通过继承向生成的类添加行为, 这会打破内部机制,无论如何都不是很好的面向对象的实践。

 

开始使用 brotobuf

1.     下载并安装 protobuf compiler  (用 C++ 编写),作用是根据定义的 .proto 文件生成指定语言的代码。

        这一步有两种方式 :

                1.  使用源码自己去编译、安装 (对使用 C++ 的同学来说很简单)。

                2.  下载已经编译好的可以直接执行的二进制文件 (对使用非 C++ 的同学来说很方便 ,下载后最好配置到环境变量中)。

2.    根据所使用的语言下载 protobuf 对应的运行时包 , 比如我使用的是 java 语言 , 那么我需要将 protobuf-java (maven 中可以找到) 这个包添加到我的工程内。 

    第 1 步是和开发环境有关 , 使用 protobuf compiler 生成代码 ,将生成的代码放在自己的应用中。

    第 2 步是和运行时有关 , 要在自己的应用中添加 protobuf 对应语言的包。

3.    编写 .proto 文件 ,在 .proto 文件中定义数据结构 , .proto 有定义好的语法规则  。 (我使用的 IDE 是 IDEA , 在 IDEA 中安装了 Protobuf Support 插件 , 可以提供一些诸如语法检查的帮助)。

4.     根据指定的 .proto 文件生成代码 , 这里我生成的是 Java 代码 , 例子 :

cat.proto 文件内容 

syntax = "proto2";  package tutorial;  option java_package = "net.j4love.protobuf.demo"; option java_outer_classname = "CatProto";  message Cat {     required int32 id = 1;     required string name = 2;     required string color = 3; }

 

protoPath : .proto 文件所在路径;

codeDestPath : 生成的 java 代码目标路径

protoFilePath : 具体的某个 .proto 文件所在路径

protobuf compiler 命令生成代码 : protoc -I=$protoPath  --java_out=$codeDestPath  $protoFilePath   (protoFilePath   可以同时指定多个,之间用空格隔开)

例子 : 

protoc -I=E:/Develop/hepeng/protobuf-demo/src/main/java/net/j4love/protobuf/proto --java_out=E:/Develop/hepeng/protobuf-demo/src/main/java E:/Develop/hepeng/protobuf-demo/src/main/java/net/j4love/protobuf/proto/cat.proto

 

使用 Java 代码的生成方式例子 :

 // protobufCompilerPath 是安装的 protobuf compiler 中 protoc.exe 的绝对路径  // 例如 :D:/DevelopmentTools/protobuf compiler/bin/protoc.exe public static void generateJavaCode(String protobufCompilerPath , String protoPath ,                                        String codeDestPath , String ... protoFilePaths) {         String protobufCmd = protobufCompilerPath + " -I=" + protoPath + " --java_out=" + codeDestPath + " ";         for (String protoFilePath : protoFilePaths) {             protobufCmd += " " + protoFilePath;         }         System.out.println("protobuf Generate Code Command : " + protobufCmd);         try {             Runtime.getRuntime().exec(protobufCmd);         } catch (IOException e) {             e.printStackTrace();         }     }

 

        经过这 4 步就可以完成一个 protobuf 的 hello world 了 , 其他详细内容还是建议看官方的文档。我编写的 protobuf-demo 代码地址

 

本文发表于2018年05月14日 10:03
(c)注:本文转载自https://my.oschina.net/j4love/blog/1811486,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1748 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1