Protocol Buffer Basics: C#
Protocol Buffer 基础知识:c# 原文地址:https://developers.google.com/protocol-buffers/docs/csharptutorial
AddressBook
命令(查看 Program.cs )可以把一个新的实体添加到数据文件或者解析数据文件并输出到控制台。
addressbook.proto
syntax = "proto3"; package tutorial;
csharp_namespace
选项已经被重新指新值,所以生成的代码使用命名空间 Google.Protobuf.Examples.AddressBook而不是 Tutorial。
option csharp_namespace = "Google.Protobuf.Examples.AddressBook";
bool
, int32
, float
, double
, and string
.你可以通过使用其它message 类型做为字段类型,来增加更多的结构。
message Person {string name = 1;int32 id = 2; // Unique ID number for this person.string email = 3;enum PhoneType {MOBILE = 0;HOME = 1;WORK = 2;}message PhoneNumber {string number = 1;PhoneType type = 2;}repeated PhoneNumber phones = 4; }// Our address book file is just one of these. message AddressBook {repeated Person people = 1; }
在上边的示例中, Person message包含 PhoneNumber message, AddressBook message 包含 Person message.甚至你可以在message里定义message类型- 你可以看到, PhoneNumber类型定义在 Person里。如果你想字段拥有预定义好的集合中的一个值,你可以定义枚举( enum)类型 -这里我们指定一个手机号,可以是 MOBILE
, HOME
, 或者 MOBILE
, HOME
, 。
Name
, Id
, Email
和 Phones属性的类 Person。
{
Id = 1234,
Name = "John Doe",
Email = "jdoe@example.com",
Phones = { new Person.Types.PhoneNumber { Number = "555-4321", Type = Person.Types.PhoneType.HOME } }
};
// Add this to the other using directives
using static Google.Protobuf.Examples.AddressBook.Person.Types;
...
// The earlier Phones assignment can now be simplified to:
Phones = { new PhoneNumber { Number = "555-4321", Type = PhoneType.HOME } }
解析和序列化
using Google.Protobuf;
...
Person john = ...; // Code as before
using (var output = File.Create("john.dat"))
{john.WriteTo(output);
}
解析也是非常简单的。每一个生成的类都有一个静态的属性 Parser,为这个类型返回 MessageParser<T>。反过来有一个方法用来解析流,二进制数组和 ByteString。用来解析我们刚创建的文件,我们可以这么做:
Person john; using (var input = File.OpenRead("john.dat")) {john = Person.Parser.ParseFrom(input); }
public void PrintMessage(IMessage message)
{var descriptor = message.Descriptor;foreach (var field in descriptor.Fields.InDeclarationOrder()){Console.WriteLine("Field {0} ({1}): {2}",field.FieldNumber,field.Name,field.Accessor.GetValue(message);}
}
Protocol Buffer Basics: C#相关推荐
- [翻译]Protocol Buffer 基础: C++
目录 Protocol Buffer Basics: C++ 为什么使用 Protocol Buffers 在哪可以找到示例代码 定义你的协议格式 编译你的 Protocol Buffers Prot ...
- 【C++】Google Protocol Buffer(protobuf)详解(一)
1.简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准, Protocol Buffers 是一种轻便高效的结构化数据存储格式 ...
- 跨语言RPC框架Hessian、Thrift、Protocol Buffer之间的选择
为什么80%的码农都做不了架构师?>>> 总结在几者之间选择的考量: 1. 如果你不需要很多语言相互调用, 希望保持清晰的java接口代码(无任何业务不相关的接口继承和方法,属 ...
- Google Protocol Buffer 简单介绍
以下内容主要整理自官方文档. 为什么使用 Protocol Buffers .proto文件 Protocol Buffers 语法 编译.proto文件 Protocol Buffers API 枚 ...
- python中使用 protocol buffer(Protobuf)
项目中引入proto的依赖 [两种方法]: 方法1. 官网下载对应的语言包,https://github.com/protocolbuffers/protobuf/releases 这里选择pytho ...
- Protocol Buffer技术详解(语言规范)
该系列Blog的内容主体主要源自于Protocol Buffer的官方文档,而代码示例则抽取于当前正在开发的一个公司内部项目的Demo.这样做的目的主要在于不仅可以保持Google文档的良好风格 ...
- Google Protocol Buffer 的使用和原理
FROM : https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Google Protocol Buffer 的使用和原理 Protocol ...
- Protocol Buffer搭建及示例
本文来源:http://www.tanhao.me/code/150911.html/ Protocol Buffer(简称Protobuf或PB)是由Google推出的一种数据交换格式,与传统的XM ...
- Protocol Buffer数据编码
这是一篇让你对Protocol Buffer知其然亦知其所以然的文档,即便你在并不了解这其中的技术细节和处理机制的情况下,仍然能够在你的应用程序中正常的使用Protocol Buffer,然而我相信, ...
最新文章
- 不存在从void转换到sqlist的适当构造函数_拷贝构造函数与赋值构造函数
- 家用计算机先驱逝世:Linux之父曾受他启发,马斯克悼念
- java word转html 烟火,Java多线程制作烟花效果.doc
- java第九章IO流与文件操作
- String类与其他数据类型得转换
- 十二、Python第十二课——函数
- 1.6 语言模型和序列生成
- 08-求解Ax=b:可解性和解的结构
- 让不同的库元件继承自共同的类
- Leetcode - Reverse Words
- SSM框架面试题及答案整理
- CentOS 6.6 nginx PHP 配置
- python做算法题_Python 笔试常见基础算法题
- 修改卡巴斯基注册表,无限试用
- 10秒钟的Cat 6A网线认证仪_DSX2-5000 CH
- ROS学习笔记(一)#ROS系统及RoboWare的安装
- 虚拟机网卡和linux bridge上tap设备的关系
- 鸿蒙系统一直重启怎么办,我的电脑能开机随后就是进不了系统一直黑在那边,时间长了就自动重启...
- process monitor解决网络问题一则
- mac双系统装mysql启动不了了_详解ubuntu双系统启动时卡死解决办法
热门文章
- SAP 获取采购订单表头长文本
- SAP SD基础知识之税(Taxes)
- AI领域3种典型的深度学习算法
- 自然语言处理的现实应用
- 【数据结构与算法】图论基础与图存储结构
- 德鲁克的黄金管理20条—------中高层管理必修课
- SAP HUM 如何把HU号码与Outbound Delivery 解除Assignment?
- 干货丨科普丨大牛的《深度学习》笔记,Deep Learning速成教程
- 科普丨让机器看见世界,这背后的技术是什么?
- (深入理解)model.eval() 、model.train()以及torch.no_grad() 的区别