写点什么

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

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

关注

评论

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

肝完阿里最新Java并发编程全优笔记,我成功晋升公司架构组

三十而立

Java java面试

2023面试到底有多难?大厂为何都注重算法?我们该如何应对?

程序知音

Java 面试 算法 数据结构与算法 后端技术

成功实践丨基于昇腾,安擎助力深圳某法院司法提效

科技热闻

MegEngine 使用小技巧:使用 Optimizer 优化参数

MegEngineBot

神经网络 深度学习 开源框架 MegEngine 参数优化

『PO价值最大化』沙盘演练!

ShineScrum

讲真,这次文档页升级我们用心了

百度开发者中心

百度地图

直播|StarRocks 3.0 极速统一的湖仓新范式

StarRocks

大数据 开源 数据湖 #数据库 湖仓一体

服务器通用背板管理(UBM)实现

天翼云开发者社区

ElasticSearch 自定义相似度插件-根据命中数排序

alexgaoyh

elasticsearch 自定义插件 相似度算法 词频排序 命中数排序

ElasticSearch 分组统计(逗号分割字符串/nested集合对象)

alexgaoyh

elasticsearch 分组查询 聚合查询 逗号分割 nested

前端开发会被AI替代吗? | 社区征文

--linshuai

三周年征文

全国计算机等级二级考试新科目—openGauss数据库程序设计

跨平台应用开发进阶(四十一)使用Xcode打包 iOS 应用 archive 时四种证书的区别详解

No Silver Bullet

uni-app 跨平台 三周年连更

Java:如何加密或解密PDF文档?

在下毛毛雨

Java 加密 PDF java解密 解密

升级数智化底座是企业数智化转型的必经之路

用友BIP

技术大会 用友iuap 用友技术大会 升级企业数智化底座

构建车联网生态,车企为什么非它不可?

编程猫

通过alter table 来实现重建表,同事大呼开眼界了

架构精进之路

MySQL 数据库· 三周年连更

海量数据×桂林银行 | 满足金融用户稳健周密需求,做好国内数据库演进的实践担当

从根上理解——高并发,向着高薪迈步!

三十而立

Java java面试

人工智能基础数据服务,第一!

百度开发者中心

人工智能 云宇宙 百度文心一言

本周最火AutoGPT!GitHub3.6万+标星,解决复杂任务全程无需人类插手

Openlab_cosmoplat

人工智能 GitHub 开源社区 autogpt

来用友BIP技术大会,一同见证IT组织从传统运维向价值运营大转变

用友BIP

技术大会 用友iuap 用友技术大会 升级企业数智化底座

【致地图开发者】地图开放平台假期服务公告

百度开发者中心

百度地图

[ChatGPT 勘误] 关于 CL_WB_PGEDITOR 的用途

汪子熙

编程 abap Netweaver 思爱普 三周年连更

MobTech MobPush|不同手机厂商推送问题

MobTech袤博科技

宇信科技加入正式openGauss社区

手把手教你集成ChatGPT到公众号

派大星

ChatGPT

开源7天Github斩获4.5万Stars!阿里2023版高并发设计实录鲨疯了

三十而立

Java java面试

IDEA统计代码行数

六月的雨在InfoQ

IDEA 三周年连更 statistic 代码行数

白嫖!字节跳动 Java岗顶级面试解析(2023版),GitHub巅峰神作!

三十而立

Java java面试

二极管/三极管/MOS管的封装类型,看这一篇就够了!

元器件秋姐

科普 封装 三极管 元器件 二极管

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