写点什么

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

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

关注

评论

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

【数组与链表】循环链表实战 - 约瑟夫问题求解

华为云开发者联盟

c++ 数据结构 华为开发者空间

制造业能源管理新范式:MyEMS 在工业园区的落地实践

开源能源管理系统

开源 能源管理系统

高达 30% 合作收益,TDengine 合作伙伴计划重磅发布

TDengine

tdengine 时序数据库

企业如何利用海外社交媒体监测工具搭建舆情监测体系?

沃观Wovision

社交媒体 舆情监测 沃观Wovision 海外舆情监测

性能测试进阶秘籍:如何用JMeter分布式压测挖掘系统极限潜

测试人

软件测试 性能测试

充电桩测试系统:数字化测试管理新范式,驱动充电设施高效运维

深圳亥时科技

【隐语SecretFlow社区】万字长文解读构建可信数据空间相关标准

隐语SecretFlow

区块链 隐私计算 标准 可信数据空间

IDC 发布|焱融科技保持强劲增长,引领AI推理存储市场

焱融科技

全闪存储 AI推理 软件定义存储

全面适配iOS 26液态玻璃,基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v10.2发布

JackJiang

网络编程 即时通讯 im开发 RainbowChat ios26

从 JSON 字符串到 Java 对象:Fastjson 1.2.83 全程解析|得物技术

得物技术

Java json `后端 开源‘

区块链 Web3 项目开发技术栈

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

区块链Web3 项目开发的技术栈

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

Fabarta个人专属智能体财经写作实战:智能深度分析加速创作升级

Fabarta

区块链 U 卡 App 关键技术栈

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

【数组与链表】数组的基本演绎法与排序“大乱斗”

华为云开发者联盟

c++ 数据结构 数组 华为开发者空间

海外营销是做什么的?

Wolink

海外营销推广 沃链Wolink 达人营销

我的 App 终于告别 “虚胖”!靠 FinClip 这套前端组件化方案

xuyinyin

MyEMS 核心架构解析:从数据采集到智能决策的完整技术栈

开源能源管理系统

开源 开源能源管理系统

技术创新的舞台:零碳园区如何成为绿色科技的试验场和展示窗?

西格电力

电力 光伏发电 绿色能源转型 零碳园区 能源可再生

批量获取1688商品数据,精准筛选与分页查询

Datafox(数据狐)

1688API 1688商品数据采集 1688数据分析 1688商品列表api

碳中和背景下的能源数字化:MyEMS 为企业提供精准碳管理方案

开源能源管理系统

开源 能源管理系统

双向链表的奥妙 - 浏览器航海家

华为云开发者联盟

c++ 数据结构 双向链表 华为开发者空间

区块链技术在各行业的应用领域

北京木奇移动技术有限公司

区块链技术 软件外包公司 web3开发

企业出海的挑战与应对方案

Wolink

品牌 跨境电商 出海企业 海外营销推广 达人营销

Playwright MCP在UI回归测试中的实战:构建AI自主测试智能体

测试人

人工智能 软件测试

NL2DSL2SQL是实现ChatBI的正确技术路线吗?

飞鲤

数据分析 Data + AI ChatBI

安全设备的静默之谜:我们花百万买的,究竟是功能还是效果?

塞讯科技

网络安全

打破应用跳转流失困局,提升推广链接转化率

HarmonyOS SDK

HarmonyOS SDK应用服务

别再乱排查了!Kafka 消息积压、重复、丢失,根源基本都是 Rebalance!

程序员小富

Java kafka

基于 Seedream 4.0 模型的多图融合应用开发实战(下)

北京中暄互动广告传媒有限公司

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