HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

Erik Bergstedt 的工具库简化了在.NET 中使用 Protobuf 的方式

  • 2016-03-09
  • 本文字数:813 字

    阅读完需:约 3 分钟

Protobuf 是由 Google 所创建的一种编码格式,它的正式名称叫做 Protocol Buffers 。这是一种紧凑的二进制格式,它牺牲了内容的可读性与可扩展性,换来了更小的空间占用与更好的性能。为了对某个 Protobuf 消息进行反序列化,客户端与服务端必须事先对消息中的特定字段达成一致。(与 XML 或 JSON 格式相反,客户端可以在运行时对后者的消息结构进行分析。)

.NET 版本的 Protobuf 实现利用了属性的自定义 attribute,为每个属性设置了一个“id”值。这些 attribute 将用于构建包含 Protobuf 消息的二进制数组。以下是 Protobuf 的一个应用示例:

复制代码
[ProtoContract]
class Address
{
[ProtoMember(1)]
public string Line1 { get; set; }
[ProtoMember(2)]
public string Line2 { get; set; }
}

在 C#中使用 Protobuf 的方式有些繁琐,因为开发者需要对流(stream)进行操作。而通过使用 Erik Bergstedt 所开发的 Protobuffer 库,只需一行代码就可以完成序列化或反序列化工作。

复制代码
var serialize = _simpleSerializer.ToByteArray(GetPerson());
Person deserialize = _simpleDeserializer.FromByteArray<Person>(serialize);

开发者可能会感到疑惑,为什么不将这些 API 直接加入 Protobuf 项目中呢?Erik 对此写道:

因为这个库的 API 是写死的,它隐藏了某些功能,这对于某些场景来说可能并不合适。它为了换取简便性而牺牲了某些功能。

举例来说,在这个库里对于流的创建方式是写死的,并且对 GZIP 的支持也超出了原始的 protobuf 的功能范围。

我们需要小心地区分特性与特性膨胀的区别。如果将这个库的功能添加至原始的 protobuf 项目中,我会认为它不是一种特性,而是一种特性膨胀。

Protobuffer 是一个基于 MIT 协议的开源软件。而 Protobuf 工具本身是由 Google 所开发的,它支持多种平台与编程语言,包括 C++、Java、JavaScript、Python 和 Ruby 等等。

查看英文原文: Thanks to a Utility Library by Erik Bergstedt, Protobuf for .NET Just Got Easier

2016-03-09 18:001283
用户头像

发布了 428 篇内容, 共 177.5 次阅读, 收获喜欢 38 次。

关注

评论

发布
暂无评论
发现更多内容

在线HTML转JADE工具

入门小站

工具

【Spring 学习笔记(二)】Spring Bean 配置方式 与Spring Bean实例化

倔强的牛角

6月月更

InfoQ 极客传媒 15 周年庆征文|分布式系统解决之道:目录、消息队列、事务系统及其他

No Silver Bullet

分布式系统 消息队列 6月月更 事务系统 InfoQ极客传媒15周年庆

迷宫问题java(DFS,回溯法,递归)

写代码两年半

DFS 迷宫 javase 回溯算法 6月月更

C#入门系列(三) -- 数据类型

陈言必行

C# 6月月更

linux之yum下载rpm包离线安装

入门小站

Linux

数据库每日一题---第1天:超过经理收入的员工

知心宝贝

数据库 算法 前端 后端 6月月更

【LeetCode】统计一个数组中好对子的数目Java题解

Albert

LeetCode 6月月更

RTP与RTCP协议简述

穿过生命散发芬芳

rtp/rtcp 6月月更

Fabric.js 上标和下标的使用偏方🔥

德育处主任

Web canvas 前端可视化 Fabric.js 6月月更

ElasticSearch部署架构和容量规划

IT巅峰技术

云原生之 Ansible 篇(一)

看,未来

云原生

云原生之 Ansible 篇(二)

看,未来

云原生

【愚公系列】2022年06月 二十三种设计模式(二十一)-策略模式(Stragety Pattern)

愚公搬代码

6月月更

15 个用于创建漂亮图表的 JavaScript 库

devpoint

eCharts D3 plotly 图表库 6月月更

在 CloudIDE 里实现天猫精灵自定义技能的业务逻辑

汪子熙

人工智能 机器学习 机器人 Cloud 6月月更

Flutter使用自定义字体

坚果

6月月更

UNet语义分割实战:使用UNet实现对人物的抠图

AI浩

图像分割 6月月更

vue-cli3项目目录结构介绍

小恺

6月月更

【Python共建】Python 列表推导式

梦想橡皮擦

6月月更

OceanBase 源码解读(十二):事务日志的提交和回放

OceanBase 数据库

oceanbase 源码解读

Javascript中的垃圾回收

大熊G

JavaScript 前端 6月月更

SpringBoot下用Kyro作为Redis序列化工具

程序员欣宸

Java 6月月更 Kyro

SDN系统方法 | 2. 用例

俞凡

架构 网络 sdn SDN系统方法

Python爬虫基础-requests模块-1

zyf

6月月更

透过华为军团看科技之变(一):广域网络

脑极体

在线人民币数字金额转成美元金额大写工具

入门小站

工具

[go] 后台管理数据权限控制实现 (无业务修改)

林逸民

通过知识图谱看端午节

清林情报分析师

数据分析 数据可视化 端午节 数据分析师 知识图谱

聊聊 Sharding-Jdbc 使用原理之分库分表下的分页方案

Nick

MySQL 分库分表 中间件 ShardingJDBC 6月月更

共享主机和 WordPress 主机之间的区别

海拥(haiyong.site)

6月月更

Erik Bergstedt的工具库简化了在.NET中使用Protobuf的方式_.NET_Jonathan Allen_InfoQ精选文章