protobuf提供了多种基础数据格式,包括string/bytes。从字面意义上,我们了解bytes适用于任意的二进制字节序列。然而对C++程序员来讲,std::string既能
存储ASCII文本字符串,也能
存储任意多个\0的二进制序列。那么区别在哪里呢?
同时在实际使用中,我们偶尔会看到类似这样的运行错误:
Protobuf介绍
Protobuf (Protocol Buffers) 是谷歌开发的一款无关平台,无关语言,可扩展,轻量级高效的序列化结构的数据格式,用于将自定义数据结构序列化成字节流,和将字节流反序列化为数据结构。所以很适合做数据存储和为不同语言,不同应用之间互相通信的数据交换格式,只要实现相同的协议格式,即后缀为proto文件被编译成不同的语言版本,加入各自的项目中,这样不同的语言可以解析其它语言通过Protobuf序列化的数据。目前官方提供c++,java,go等语言支持。
下面表格是支持语言的
return max;
//编译中max可以换成别的定义,但要注意你弟你定义的变量一定要初始化,通常,我们遇到加号时,定义为0,遇到乘号时,定义为1,具体原因就不做解释,学过数学的应该都能理解。
1、json: 一般的web项目中,最流行的主要还是json。因为浏览器对于json数据支持非常好,有很多内建的函数支持。
2、xml: 在webservice中应用最为广泛,但是相比于json,它的数据更加冗余,因为需要成对的闭合标签。json使用了键值对的
方式,不仅压缩了一定的数据空间,同时也具有可读性。
3、
protobuf:是后起之秀,是谷歌开源的一种数据格式,适合高性能,对响应速度有要求的数据传输场景。因为profobuf是二进制数据格式,需要
编码和解码。数据本身不具有可读
在很多很多时候被问起,为什么选择
protobuf?最先被想起的回答的就是体积小、解析快。那相比较于json、XML,为什么
protobuf能够做到又小又快呢?
归其原因,这与它的编解码
方式有很大的关系。本文将走进
protobuf的深层原理来进行剖析。
本文针对实际的例子,来对
protobuf的编解码
方式进行详细讲解。其中,.proto文件定义如下:
syntax = "proto2";
博客搬家,原地址:https://langzi989.github.io/2017/06/07/protoBuffer中string与byte类型区别/
从上一节protobuffer的介绍中我们知道字符串类型在protobuffer中有string和bytes两种类型,那这两种类型有什么区别呢,什么时候用string,什么时候用bytes。在C++中两种类型分别对应的是什么类型.下面将揭开迷雾