1.定义字符串一般不使用string,使用bytes来代替string。若定义为string,proto底层还是会把string->bytes,虽然不会影响结果,但是在一定程度上还是会浪费效率。 2.其他的数据类型,基本数据,列表,映射表 3.为成员变量设置值 test.proto 代码语言:javascript 复制 message Error{int32 errorCode=1;bytes errorMsg=2;}me...
string, 只能处理ASCII字符 bytes, 用于处理多字节的语言字符 enum, 枚举类型 二、protobuf的使用流程: 下载protobuf压缩包后,解压、配置、编译、安装,即可使用 protoc 命令 查看Linux中是否安装成功: [root@linux] protoc --version libprotoc 3.15.8 使用protobuf时,需要先根据应用需求编写 .proto 文件 定义消息...
protobuf里的string/bytes在C++接口里实现上都是std::string。 两者序列化、反序列化格式上一致,不过对于string格式,会有一个utf-8格式的检查。 会调用WriteStringMaybeAliased,判断宏: (__builtin_expect(false || (size >= 128 || end_ - ptr + 16 - TagSize(num << 3) - 1 < size), false)) ...
关于fixed32 和int32的区别。fixed32的打包效率比int32的效率高,但是使用的空间一般比int32多。因此一个属于时间效率高,一个属于空间效率高。根据项目的实际情况,一般选择fixed32,如果遇到对传输数据量要求比较苛刻的环境,可以选择int32. ③.字段名称 字段名称的命名与C、C++、Java等语言的变量命名方式几乎是相同的。
5.string和bytes在合法UTF-8字节前提下也是兼容的。 6.bytes包含消息编码版本的情况下,嵌套消息与bytes也是兼容的。 7.fixed32与sfixed32兼容,fixed64与sfixed64兼容。 8.enum与int32,uint32,int64和uint64兼容(注意若值不匹配会被截断)。但要注意当反序列化消息时会根据语言采用不同的处理方案:例如,未识别的...
而与之相似的还有XML和JSON,但是无论是哪一种数据存储或者数据传输的方法,都会有一些短板,要么受到语言环境的限制,要么编码体积不理想,传输效率低,或者兼容扩展性较差等。于是,protobuf诞生了。 一.简单概述 Protobuf,全称为Google Protocol Buffer,是一种轻便高效的结构化数据存储格式,可用于通讯协议和数据存储等主要...
—bytes:对应是java的ByteString类型 字段修饰符: —repeated:用来定义数组,一个数组可以重复出现一定次数(包括0次) —required:值不可空 —optional:可选字段 —singular:符合语法规则的消息,包含0个或者1个这样的字段 —默认值: string code=2 [default=200]; ...
这里的数据结构化主要面向开发或业务层面,数据序列化面向通信或存储层面,当然数据序列化也需要“结构”和“格式”,所以这两者之间的区别主要在于面向领域和场景不同,一般要求和侧重点也会有所不同。数据结构化侧重人类可读性甚至有时会强调语义表达能力,而数据序列化侧重效率和压缩。