开发学院

您的位置:首页>教程>正文

教程正文

Protocol Buffer C#实例教程: 前言

   本教程翻译自谷歌开发者官网,原文地址:https://developers.google.com/protocol-buffers/docs/csharptutorial。开发学院对其进行了简单的翻译,本页面的内容是根据知识共享属性3.0许可的,代码示例是根据Apache 2.0许可的。

  本教程提使用Protocol Buffer 3,通过创建一个简单的示例程序,向您展示了如下内容:

  •   在. proto文件中定义消息格式。

  •   使用Protocol Buffer编译器。

  •   使用C#版本的Protocol Buffer API来读写消息。

  这不是在C#中使用Protocol Buffer的全面指南。有关更详细的参考信息,请参见《Protocol Buffer语言指南》、《C#应用编程接口参考》、《C#生成代码指南》和《编码参考》。

为什么使用protocol Buffer?

  我们将要使用的例子是一个非常简单的“地址簿”应用程序,它可以读写文件中的联系人详细信息。通讯簿中的每个人都有一个姓名、一个身份证号、一个电子邮件地址和一个联系电话号码。

  如何序列化和检索这样的结构化数据?有几种方法可以解决这个问题:

  •   使用.NET框架的System.Runtime.Serialization.Formatters.Binary.BinaryFormatter相关类进行二进制序列化。但是不适用于频繁变化的数据,某些情况下开销是非常大的。如果您需要与为其他平台编写的应用程序共享数据,不建议使用。

  •   可以发明一种特殊的方法将数据项编码成字符串,例如将4个int编码为“12:3:-23:67”。这是一种简单而灵活的方法,尽管它确实需要编写编码和解析代码,而且解析会带来运行时成本。这对于编码非常简单的数据最有效。

  •   将数据序列化为XML。这种方法可能非常有吸引力,因为XML 某种程度上是人类可读的,并且许多语言都提供相应的库。如果您想与其他应用程序/项目共享数据,这可能是一个不错的选择。然而,众所周知,XML占用大量空间,编码/解码它会给应用程序带来巨大的性能损失。此外,导航一个XML DOM树比导航一个类中的简单字段要复杂得多。

  Protocol Buffer是解决这个问题的灵活、高效、自动化的解决方案。使用Protocol Buffer,您可以编写一个想要存储的数据结构的. proto描述。由此,Protocol Buffer编译器创建了一个类,该类以有效的二进制格式实现Protocol Buffer数据的自动编码和解析。生成的类为组成Protocol Buffer的字段提供了获取器和设置器,并作为一个单元处理读写Protocol Buffer的细节。重要的是,Protocol Buffer格式支持随着时间的推移以及扩展字段,使得代码仍然可以读取用旧格式编码的数据。

演示代码地址

  我们的例子是一个命令行应用程序,用于管理使用Protocol Buffer编码的地址簿数据文件。命令AddressBook (参见: Program.cs )可以向数据文件添加新条目,或者解析数据文件并将数据打印到控制台。

  您可以在GitHub存储库的示例目录https://github.com/protocolbuffers/protobuf/tree/master/examples和https://github.com/protocolbuffers/protobuf/tree/master/csharp/src/AddressBook目录中找到完整的示例。