写点什么

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:001269
用户头像

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

关注

评论

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

群晖(Synology)NAS 后台安装 Docker 后配置 Mariadb / MySQL 配置端口

HoneyMoose

7招!实现安全高效的流水线管理

阿里云云效

云计算 阿里云 运维 云原生 持续交付

评测有礼 | 飞桨黑客松第二期热身活动上线啦!

百度大脑

区块链的过去与未来

CECBC

半导体材料的国产替代,机遇与挑战并存!

IC男奋斗史

芯片行业思考 芯片技术 芯片上游

CorelDRAW2022最新订阅版本下载

茶色酒

cdr2022

百度Q4财报:百度智能云2021年营收151亿元,同比大增64%

百度大脑

当听障人士实现手语自由:手语AI平台的产业狂想

脑极体

自己动手写Docker系列 -- 3.1构造实现run命令版本的容器

Go Docker

面由心生,由脸观心:基于AI的面部微表情分析技术解读

百度大脑

Powershell基础之脚本执行

喀拉峻

网络安全 安全 渗透测试

安全无小事,教你解决密码泄露问题!

老陈

工具 安全 密码泄露

两会声音|建议完善数字人民币体系 完善数字货币立法

CECBC

【C语言】轻松解决Bug

謓泽

C语言 bug 3月月更

低代码实现探索(三十四)前台code逻辑

零道云-混合式低代码平台

面向企业级前端应用的开发框架 UI5 的发展简史介绍

汪子熙

JavaScript 前端开发 前端框架 企业级应用 3月月更

赋能区域产业,南京、成都双城AI开发者Meetup报名开启

百度大脑

重磅硬核 | 一文聊透对象在JVM中的内存布局,以及内存对齐和压缩指针的原理及应用

bin的技术小屋

JVM 内存 Java虚拟机 false sharing java

快速入门!全国大学生智能汽车竞赛百度创意组首期直播宣讲来啦

百度大脑

工业AI落地场景案例实战,飞桨EasyDL让工业更智能

百度大脑

中国AI的“底线思维”与安全锁

脑极体

群晖(Synology)NAS 后台安装 Docker 后配置 Mariadb / MySQL

HoneyMoose

最好用的 6 款 Vue 拖拽组件库推荐 - 卡拉云

蒋川

Vue Vue3 vue cli

区块链共识,机器说了算还是人说了算?

Akumas

区块链 数字化转型 共识机制 十四五规划

开发提效小技巧分享(二)

编程三昧

工具 gitee GitHub、 3月月更

Mac 配置 Flutter 安卓开发环境

岛上码农

flutter ios 安卓 移动开发 3月月更

HTTP的成长

Tristan

前端 浏览器 网络 HTTP

俄罗斯能通过加密货币规避制裁吗?

CECBC

千万级学生管理系统的考试试卷存储方案

AragornYang

架构训练营 架构实战营

昇思MindSpore再突破:蛋白质结构预测训练推理全流程开源,助力生物医药发展

Geek_32c4d0

mindspore 昇思 生物医药

群晖(Synology)NAS 安装 Mariadb 数据库启动错误

HoneyMoose

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