Protocol Buffer的C++入门教程 ---- http://blog.csdn.net/k346k346/article/details/51754431
protobuf 简单入门 ---- http://blog.csdn.net/jeanphorn/article/details/472815
下载---安装---编写.proto协议文件----编译生成类 --- 导入使用
1.protobuf简介
protobuf(Protocol Buffers )是google的开源项目
简单的说,protobuf是用来对数据进行序列化和反序列化。那么什么是数据的序列化和反序列化呢?见下文。
protobuf支持目前主流的开发语言,包括C++、Java、Python、Objective-C、C#、JavaNano、JavaScript、Ruby、Go、PHP等。只要你使用以上语言,都可以用protobuf来序列化和反序列化你的数据。
2.数据的序列化和反序列化
序列化 (Serialization):将数据结构或对象转换成二进制串的过程
反序列化(Deserialization):将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。
我们为什么要序列化数据,貌似很多人并没有使用过,但是序列化数据却无处不在。我们要存储或者传输数据时,需要将当前数据对象转换成字节流便于网络传输或者存储。当我们需要再次使用这些数据时,需要将接收到的或者读取的字节流进行反序列化,重建我们的数据对象。
多说无益,举个例子。假如程序中你用到了如下结构的对象,以C++为例:
<code class="language-c++ hljs cpp has-numbering"><span class="hljs-comment">//学生类型</span> <span class="hljs-keyword">struct</span> Student{ <span class="hljs-keyword">char</span> ID[<span class="hljs-number">20</span>] <span class="hljs-keyword">char</span> name[<span class="hljs-number">10</span>]; <span class="hljs-keyword">int</span> age; <span class="hljs-keyword">int</span> gender; }; <span class="hljs-comment">//定义一个学生对象</span> Student student; <span class="hljs-built_in">strcpy</span>(student.ID,<span class="hljs-string">"312822199204085698"</span>); <span class="hljs-built_in">strcpy</span>(student.name,<span class="hljs-string">"dablelv"</span>); student.age=<span class="hljs-number">18</span>; student.gender=<span class="hljs-number">0</span>;</code><ul class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li></ul><div style="display: none;" class="save_code tracking-ad" data-mod="popu_249"><a target=_blank href="javascript:;" target="_blank"><img src="http://static.blog.csdn.net/images/save_snippets.png" alt="" /></a></div><ul class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li></ul>
现在我需要将学生对象从客户端程序发送到远程的服务端程序。那们这个时候我们就需要对学生对象student进行序列化操作。以Linux的socket进行发送,我们需要调用系统为我们提供的网络IO相关的API,它们有如下几组:
3
1、在.proto文件中定义消息格式