tensorflow 之 Protocol Buffer

1. Protocol Buffer

常用的结构化数据处理工具有:XML、JSON、Protocol Buffer。其中Protocol Buffer是谷歌开发的处理结构化数据的工具。

  • 这里结构化的数据,指的是拥有多种属性的数据。如 要记录一些用户的信息,包括用户的名字、ID、E-mail地址,那么这就是一个结构化的数据。
  • 要将这些结构化的用户信息持久化或者进行网络传输时,就需要先将它们序列化。所谓序列化,是将结构化的数据变成数据流的格式,也就是变成一个字符串。
  • 将结构化的数据序列化,并从序列化之后的数据流中还原出原来的结构化数据,统称为处理结构化数据,这就是Protocol Buffer解决的主要问题。

2. Protocol Buffer的格式

XML的格式为:

<user>
<name>张三</name>
<id>12345</id>
<email>zhangsan@abc.com</email>
</user>

JSON的格式为:

{
"name": "张三",
"id": "12345",
"email": "zhangsan@abc.com",
}
 

Protocol Buffer格式的数据和XML、JSON格式的数据有较大的区别。

  • Protocol Buffer序列化之后得到的数据是二进制流,不是可读的字符串
  • XML、JSON格式的信息都包含在了序列化之后的数据中,不需要任何其他信息就能够还原序列化之后的数据。但使用Protocol Buffer时需要先定义数据的格式。还原一个序列化之后的数据,需要使用到这个定义好的数据格式。由于这样的差别,Protocol Buffer序列化出来的数据要比XML格式的数据小3~10倍,解析时间快20~100倍。
    以下代码给出了上述用户信息样例的数据格式定义文件:
    message user{
    optional string name=1;
    required int32 id=2;
    repeated string email=3;
    }

Protocal Buffer 定义数据格式的文件一般保存在 .ptoto 文件中。每个message代表了一类结构化的数据,比如这里的用户信息。message里面定义了每一个属性的类型和名字。

  • Protocol Buffer里属性的类型可以是像布尔型、整数型、实数型、字符型这样的基本类型,也可以是另外一个message。这样大大增加了Protocol Buffer的灵活性。
  • 在message中,Protocol Buffer也定义了一个属性是必需的(required)还是可选的(optional),或者是可重复的(repeated)。
    |必需的(required):message的所有实例都需要有这个属性;
    |可选的(optional):这个属性的取值可以为空;
    |可重复的(repeated),那么这个属性的取值可以是一个列表。

    以用户信息为例,所有用户都需要有ID,所以ID这个属性是必需的;不是所有用户都填写了姓名,所以姓名这个属性是可选的;一个用户可能有多个E-mail地址,所以E-mail地址是可重复的。 

Protocol Buffer 是tensorflow系统中使用到的重要工具,tensorflow中的数据基本都是通过 Protocol Buffer来组织的 

上一篇:Dubbo常用功能02--protocol协议


下一篇:网络知识学习笔记