使用Android studio3.2,在gradle中中配置: 在project的bulid.gradle中增加: classpath 'com.google.protobuf:protobuf-gradle-plugin...在APP目录下的buid.gradle中,增加: apply plugin: 'com.google.protobuf' android { sourceSets { main {...dependencies { //protobuf implementation "com.google.protobuf:protobuf-java:3.1.0" implementation ('com.squareup.retrofit2...:converter-protobuf:2.2.0') { exclude group: 'com.google.protobuf', module: 'protobuf-java'...最后给个使用的demo,序列化和反序列化: package com.newcapec.testsqllite.protobuf; import com.google.protobuf.InvalidProtocolBufferException
文章目录 一、Protobuf 使用文档 二、创建 Protobuf 源文件 三、Protobuf 语法 四、参考资料 一、Protobuf 使用文档 ---- Protobuf Java 语言对应用法...: https://developers.google.com/protocol-buffers/docs/javatutorial 使用时 , 参考上述页面的文档说明 , 进行开发 ; 二、创建...Protobuf 源文件 ---- 首先 , 编写 Protobuf 源文件 , 使用官方提供的源文件 , 进行开发 ; syntax = "proto2"; package tutorial; option...PhoneNumber phones = 4; } message AddressBook { repeated Person people = 1; } 在 Android Studio 工程中的...中设置枚举与 Java 相同 , 定义和使用的用法如下 ; // 枚举 enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2;
相对于JSON和XML具有以下优点: - 简洁 - 体积小:消息大小只需要XML的1/10 ~ 1/3 - 速度快:解析速度比XML快20 ~ 100倍 - 使用protobuf的编译器,可以生成更容易在编程中使用的数据访问代码...下载,安装 在使用protobuf之前,需要安装protobuf编译器和运行时环境。 由于protobuf是跨平台,跨语言的,所以需要下载和安装对应版本的编译器和运行时依赖。...使用protobuf 新建一个空的maven项目,并添加protobuf运行时依赖: pom.xml: <!...; import org.chench.test.protobuf.AddressBookProtos.Person.PhoneType; /** * 使用protobuf类示例: ...序列化文件中读取之前保存进去的数据。
例如,在深度学习中常用的ONNX交换模型就是使用.proto编写的。我们可以通过多种前端(MNN、NCNN、TVM的前端)去读取这个.onnx这个模型,但是首先你要安装protobuf。...一般来说,protobuf经常搭配Cmake使用,Cmake有官方的modules,可以通过简单的几个命令protobuf_generate_cpp来生成对应的.pb.cc和.pb.h。...mediapipe中使用了大量的ProtoBuf技术来表示图结构,而且mediapipe原生并不是采用cmake来构建项目,而是使用google自家研发的bazel,这个项目构建系统我就不评价了,而现在我需要使用...如果直接对上述所有的.proto文件直接使用protobuf_generate_cpp命令,会直接报错,因为这些文件不在一个目录,而且import的相对目录也无法分析。...CLion中Cmake来编译proto生成的.pb.cc和.pb.h不在原始目录,而是集中在cmake-build-debug(release)中,我们额外需要将其中生成的.pb.cc和.pb.h文件移动到原始地址
序列化】Protobuf 使用 ( protobuf-gradle-plugin 插件简介 | Android Studio 中配置插件 | AS 中编译源文件 ) 中 , 使用了 Gradle 插件..., 自动将 Android Studio 工程中的 Protobuf 编译成了 Java 源码 , 现在开始使用生成的 Java 源码进行开发 ; 在 Protobuf 源码 addressbook.proto...中 , 有一个 AddressBook 类 , 其中有一个 Person 集合 , Person 类中还包含 PhoneNumber 集合 ; 二、创建 Protobuf 对象 ---- 创建 Protobuf...Person 对象 , 每个 Person 对象中包含 若干 PhoneNumber 枚举值 , 如果对象的某字段在 Protobuf 源码中被 required 修饰 , 则该字段必须被赋值 ; 首先要创建...addPhones(phoneNumber1Builder) 之后创建 AddressBook 构造器 : 创建时可以将多个 Person 构造器拼装进来 , // 使用 newBuilder 方法创建
安装 wget https://github.com/protocolbuffers/protobuf/releases/download/v3.20.0/protobuf-php-3.20.0.tar.gz...tar -zxvf protobuf-php-3.20.0.tar.gz cd protobuf-3.20.0 ..../configure --prefix=/usr/local/protobuf make make install #软链 ln -s /usr/local/protobuf/bin/protoc /...sex=3;//性别 } #生成php代码 protoc --php_out=./ person.proto #即 GPBMetadata/Person.php Test/Person.php # 使用...首先,使用命令decode一下 root@php-fpm:/var/www/php-demo/protobuf# protoc --decode_raw < data.bin 1: "\345\274
C++ 生成代码指南 | 协议缓冲区文档 – ProtoBuf 中文 namespace 如果 .proto 文件包含 package 声明,则该文件的所有内容都将放置在相应的 C++ 命名空间中。...要检查空集,请考虑使用底层 RepeatedField 中的 empty() 方法,而不是此方法。 int32 foo(int index) const:返回给定基于零的索引处的元素。...void add_foo(int32 value):使用给定值将新元素追加到字段的末尾。 void clear_foo():从字段中删除所有元素。调用此方法后,foo_size() 将返回零。...要检查空集,请考虑使用底层 RepeatedField 中的 empty() 方法,而不是此方法。 const string& foo(int index) const:返回给定基于零的索引处的元素。...要检查空集,请考虑使用底层 RepeatedField 中的 empty() 方法,而不是此方法。 const Bar& foo(int index) const:返回给定零基索引处的元素。
文章目录 一、protobuf-gradle-plugin 插件简介 二、Android Studio 中配置 protobuf-gradle-plugin 插件 三、Android Studio 中编译...编译器简介 | 下载 protoc 编译器 | 使用 protoc 编译器编译 .proto 源文件 ) 中 , 在命令行中使用 protoc 编译器 , 将 .proto 源文件编译成了 Java...' // or 'com.android.library' apply plugin: 'com.google.protobuf' 如果使用 Protobuf 3.0 ~ 3.7 之间的版本 , 使用的是...protobuf-lite 版本 , 该版本相对于普通的 Protobuf , 生成的源文件更精简 , 这是为了适配在 Android 设备上使用而定制的 , 更适合移动端使用 ; dependencies...类引入到当前项目的 Classpath 中 , 并打包到 APK 中 , 在开发时 , 可以引用这些类 ; 四、参考资料 ---- Protobuf 参考资料 : Protobuf 官网主页 : https
访问 https://github.com/protocolbuffers/protobuf/releases 选择对应的系统进行下载。...为了方便使用,建议将 protoc 加到 PATH 中,mac 可以放到 /usr/local/bin/ 下。...安装 proto-gen go , 执行命令 go install github.com/golang/protobuf/protoc-gen-go@lates 安装完成后检查是否安装成功 ls $GOPATH...go_package = "/pb"; message Person { string name = 1; } 生成 pb.go protoc --go_out=. *.proto 生成 grpc 使用命令...main import ( "fmt" "github.com/golang/protobuf/proto" "go-protobuf/pb" "log" ) func main() {
为什么要使用protobuf 最近的项目中,一直使用Json做数据传输。Json用起来的确很方便。但相对于protobuf数据量更大些。做一个移动端应用,为用户省点流量还是很有必要的。...正好也可以学习一下protobuf的使用 跟Json相比protobuf性能更高,更加规范 编解码速度快,数据体积小 使用统一的规范,不用再担心大小写不同导致解析失败等蛋疼的问题了 但也失去了一些便利性...数据没有可读性 安装 在go中使用protobuf,有两个可选用的包goprotobuf(go官方出品)和gogoprotobuf。...编解码库,下面两个库是相互兼容的,可以使用其中任意一个 "github.com/golang/protobuf/proto" //"github.com/gogo/protobuf/proto...,可以使用其中任意一个 "github.com/golang/protobuf/proto" //"github.com/gogo/protobuf/proto" ) func main
先上官方使用文档 https://developers.google.cn/protocol-buffers/docs/proto3 定义proto文件 syntax = "proto3"; //.表示生成的...GetInfo(StuReq) returns (Student); } 执行生成go文件命令 不带注册服务的编译 protoc --go_out=./ *.proto 带注册服务的编译(只适用在grpc中).../reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect"...:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` //定义枚举类型 Sex Sex `protobuf:"varint,2,opt,name...=p,proto3" json:"p,omitempty"` //切片数组定义 Like []string `protobuf:"bytes,3,rep,name=like,proto3" json
解决使用protobuf库过程中出现的编译问题。protobuf和XML,json一样的数据结构。 问题1 缺protobuf库,可以定义PROTOBUF_USE_DLLS来链接protobuf库。...无法解析的外部符号 "class google::protobuf::internal::ExplicitlyConstructed > 解决方法: DEFINES += PROTOBUF_USE_DLLS 问题2 std::min,std::max...”右边的非法标记 UserInfo_STATE_UserInfo_STATE_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf...::min(), UserInfo_STATE_UserInfo_STATE_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf
文章目录 一、Protobuf 序列化 二、Protobuf 反序列化 三、完整代码 四、参考资料 一、Protobuf 序列化 ---- 在上一篇博客 【Android Protobuf 序列化】Protobuf...使用 ( Protobuf 源码分析 | 创建 Protobuf 对象 ) 中 , 创建了 Protobuf 对象 , 本博客中将其序列化 , 保存到本地文件中 ; 序列化操作 : 调用 Protobuf...I/MainActivity: 序列化耗时 4 ms , 序列化大小 34 字节 二、Protobuf 反序列化 ---- 反序列化操作 : 调用 Protobuf 对象的 parseFrom 方法...addPhones(phoneNumber2Builder) // 使用 newBuilder 方法创建 AddressBook.Builder 对象 var addressBookBuilder.../protocol-buffers/docs/downloads Protobuf 源码地址 : https://github.com/protocolbuffers/protobuf Protobuf
一、protobuf是什么 protocol buffer(简称protobuf)是google 的一种数据交换的格式,它独立于语言,独立于平台。...由于它是一种二进制的格式,比使用xml行数据交换快许多。...二、windows7下载安装protobuf 由于下的Python是3.6.2版本,所以protobuf要下3.0版本的,不然后面运行那个setup.py 有问题,不能安装。...-3.0.0.zip 包含了protobuf与语言(python)之间的protobuf运行时库,这个在转换的时候需要用到,相当与protobuf与各语言之间的协定格式。...,--python_out=编译生成的文件的路径 ,people.proto是要编译的协议文件 编译好之后你就会在目标目录里面看到输出的结果文件,如下:people_pb2.py 然后我们就可以使用生成的
1.定义字符串一般不使用string,使用bytes来代替string。若定义为string,proto底层还是会把string->bytes,虽然不会影响结果,但是在一定程度上还是会浪费效率。
rpc方法的序列化和反序列化 rpc标签 在protobuf中定义描述rpc方法的类型 - service 在proto文件中增加rpc服务的选项 // 表示生成service服务类和rpc方法描述,默认是不生成的
什么是protobuf?...安装protoc工具 proto用来将.proto文件转化为自己使用的语言格式,我使用的是go语言,所以还要下载一个与protoc配合的插件,一会再说这个插件。...我使用的是linux环境,下载protoc源码,下载地址,我选择如图的安装包,可以不需要再编译,直接将bin添加到环境变量中或者将bin/protoc 软链接到/usr/bin下。...protobuf插件 go语言相关的有两个插件gogoprotobuf和goprotobuf(官方出品) 我这块选择gogoprotobuf(比官方感觉更好),同样也兼容官方 go get github.com.../gogo/protobuf/protoc-gen-gofast 最终 开始编写.proto文件,编写完运行此命令 protoc --gofast_out=. a.proto 将编写的a.proto文件转化为
一、protobuf简介 protobuf (protocol buffer)是google公司实现的一种数据交换的格式,由于其是一种二进制的格式,相对于xml,json进行数据交换要快很多,且占用存储空间更小...二、protobuf的基础语法及编译命令 由于protobuf独立于平台语言,Google为其提供了多种语言的实现,包括Java,C++,Go,Python等,并且为每一种实现都包含了相应语言的编译器和库文件...,方便不同语言开发者的使用。...类型 enum Sex { //枚举类型 MAN = 0; WOMAN = 1; } Sex sex = 3; bool flag = 4; // bool类型 } (2)编译 使用...文件,编译生成C++的源文件和头文件,如对test1.proto进行编译: protoc test1.proto --cpp_out=./ 生成test1.pb.cc和test1.pb.h文件 三、使用
简介 netty中提供的protobuf编码解码器可以让我们直接在netty中传递protobuf对象。同时netty也提供了支持UDP协议的channel叫做NioDatagramChannel。...如果直接使用NioDatagramChannel,那么我们可以直接从channel中读写UDP对象:DatagramPacket。...而ProtobufDecoder与ProtobufEncoder是将protoBuf对象MessageLiteOrBuilder跟ByteBuf进行转换,所以两者是不能直接结合使用的。...netty中的UDP channel就是使用DatagramPacket来进行数据的传递。...如果使用ProtobufDecoder作为内置的decoder,则可以将ByteBuf对象decode成为ProtoBuf对象,刚好和之前讲过的encode相呼应。
相对于JSON来说,编码解码的步骤比较繁琐,但是,protobuf 比 JSON 快 https://github.com/dcodeIO/protobuf.js/blob/master/README.md...#performance 这是 dcodeIO 团队对 protobuf 和 native JSON 做了一些测试 从报告中可以看出,无论是编码解码还是结合的过程( protobuf 从对象编码为二进制...在node环境下 PB的具体使用方式 我们创建三个文件 server.js client.js schema.proto server.js 为发送端,它将数据发送给 client客户端 /** *.../protobuf/schema.proto'); // 从protobuf 中抽取实例 let um = serverSchema.lookupType('user_message.user');...作用是,如果一个message中,某一项有多种不同类型的值就使用oneof 取其一。
领取专属 10元无门槛券
手把手带您无忧上云