写点什么

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

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

关注

评论

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

要想自助洗车加盟赚钱记住这几点

共享电单车厂家

自助洗车加盟 自助洗车品牌

24H共享便民自助洗车加盟怎么样

共享电单车厂家

共享自助洗车 自助洗车加盟 24小时自助洗车 便民自助洗车

“互联网+”大学生创新创业大赛来了,欢迎报名龙蜥社区赛题!

OpenAnolis小助手

开源 操作系统 互联网+ 龙蜥社区 大学生创新创业大赛

如何系统地学习 C++ 语言?太全面了!

Jackpop

FutureTask

急需上岸的小谢

6月月更

融云 x 川航: 为民航通信安上“即时之翼”

融云 RongCloud

低代码开发:企业应用构建新模式

力软低代码开发平台

JDK7 HashMap如何实现?

源字节1号

软件开发 前端开发 后端开发 小程序开发

大数据平台迁移实践 | Apache DolphinScheduler 在当贝大数据环境中的应用

白鲸开源

Apache 大数据 开源 DolphinScheduler workflow

IT采购专家指导 联想百应618 IT运维软硬服一站集采

极客天地

首批 | 腾讯云完成国内首个云原生安全成熟度评估

腾讯安全云鼎实验室

云原生

10段实用Python代码,帮我省了几万块钱!

Jackpop

SRE,了解一下?35+岁程序员新选择

华为云开发者联盟

SRE 华为云

自助洗车市场悄然兴起你准备好了吗

共享电单车厂家

自助洗车 自助洗车加盟

写代码过程中最忌讳什么?

Jackpop

SQL和Python 哪个更容易自学?

Jackpop

共享自助洗车机让你告别传统洗车

共享电单车厂家

共享自助洗车 自助洗车加盟

API 网关 Apache APISIX 助力雪球双活架构演进

API7.ai 技术团队

zookeeper 投资 网关 APISIX APISIX Summit

Jupyter Notebook,太强大了!

Jackpop

自助洗车机洗车怎么收费和付费

共享电单车厂家

自助洗车加盟 自助洗车收费 自助洗车付费

测试进阶必备,这5款http接口自动化测试工具不要太香~

伤心的辣条

Python 程序人生 软件测试 自动化测试 接口自动化测试

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作

亚马逊云科技 (Amazon Web Services)

Amazon EC2 EC2

@开发者 云端一条生产线,让软件开发更敏捷、更安全

华为云开发者联盟

云计算 敏捷 华为云 devcloud

华为云重磅发布:“乐高式”自动驾驶研发开放平台,携手伙伴共建生态

华为云开发者联盟

自动驾驶 云计算 华为云

Apache Dolphinscheduler3.0.0-beta-1 版本发布,新增FlinkSQL、Zeppelin任务类型

白鲸开源

Apache 大数据 开源 Apache DolphinScheduler 消息队列 workflow

7 月亚马逊云科技培训与认证课程,精彩不容错过!

亚马逊云科技 (Amazon Web Services)

架构师 培训 认证

vue-表单输入绑定

小恺

6月月更

Curve 进入 CNCF Sandbox,完善统一云原生开源存储拼图

网易数帆

开源 分布式 云原生 存储 cncf

开启全方位安全巡检

观测云

阿里云 MSE 基于 Apache APISIX 的全链路灰度方案实践

API7.ai 技术团队

阿里云 MSE APISIX 网关 全链路灰度

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