报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

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

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

关注

评论

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

巴塞罗那VS瓦伦西亚:两支西甲传统队志在为各自目标全取三分

新消费日报

RTE 社区 2024 总结:虽然「卷」,但可以和一群朋友一起,找到自己的速度丨RTE 开发者社区

声网

Mac为什么读取不了U盘数据 Mac读取不了U盘格式怎么办?

阿拉灯神丁

Tuxera NTFS2023 NTFS 磁盘管理器

实评实测 | ETL 行业也够卷,云化 ETL,ETL 软件不过了

tapdata

数据复制 云迁移解决方案 云化etl etl软件 etl工具

SonarQube Server 2025.1 LTA - 代码质量、安全与静态分析工具

sysin

SonarQube

辞旧迎新 继往开来——西甲联盟2024大事迹回顾与2025新年展望

新消费日报

为什么海外直播要用TikTok直播专线?

Ogcloud

海外直播专线 海外直播 tiktok直播 tiktok直播专线 tiktok直播网络

Hugging Face 视觉语言小模型 SmolVLM 可在手机运行;OpenAI 推出智能体 Operator 联网执行任务

声网

致敬开源与创新!「2024龙蜥社区年度优秀贡献者」评选正式启动

OpenAnolis小助手

操作系统 龙蜥社区优秀贡献者评选

微财基于 Flink 构造实时变量池

Apache Flink

大数据 flink 实时计算

《CPython Internals》阅读笔记:p353-p355

codists

CPython Internals

成功案例丨Altair HyperWorks 助力打造复杂玻璃快速验证工具

Altair RapidMiner

hyperworks 玻璃载荷分析 静态载荷分析 复杂玻璃验证

Twitter账号关联导致封号怎么办?

Ogcloud

海外云手机 云手机海外版 账号防关联 防关联浏览器

ping命令的故事

胡译胡说

c Linux 网络编程 ping ICMP

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