写点什么

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

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

关注

评论

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

leetcode 435. Non-overlapping Intervals 无重叠区间(中等)

okokabcd

LeetCode 数据结构与算法 贪心算法

【Docker 那些事儿】容器数据卷的本手

Albert Edison

Docker Kubernetes 容器 云原生 7月月更

Typora常用语法和md样式美化一本通

武师叔

7月月更

赛博女娲,怎么造数字人?

脑极体

“穿越”到虚拟世界笑风生,网易瑶台沉浸式活动平台创新云端活动体验

阿里云弹性计算

虚拟世界 GPU服务器 瑶台

阿里云架构师马颂:云上高性能计算助力基因测序

阿里云弹性计算

高性能计算 EHPC 基因测序

Flutter 来一个笑嘻嘻的动态表情

岛上码农

flutter ios 前端 安卓开发 7月月更

数据建模

奔向架构师

数据仓库 数据建模 7月月更

IPv6大航海,风帆指向强应用

脑极体

Docker 安装 MySQL8.0

宁在春

MySQL Docker 镜像 7月月更

KubeEdge Summit 2022首日亮点 | 全球产学研齐聚一堂,共话边缘新未来

华为云原生团队

云原生 边缘计算 kubeedge 边缘AI IOT设备管理

SENSORO智慧社区服务方案:抓住基层治理的“神经末梢”

SENSORO

物联网

【刷题记录】10. 正则表达式匹配

WangNing

7月月更

Python爬虫抢购某宝秒杀商品

弑着去忘记う

Python

必须掌握的CSS三大特性🎨

猪痞恶霸

前端 7月月更

小程序表单-3

小恺

7月月更

Istio Mesh模型

阿泽🧸

7月月更 Istio Mesh

zookeeper-zookeeper常用命令

zarmnosaj

7月月更

实践丨手把手教你用STM32设计WiFi语音播报日程表

华为云开发者联盟

开发

「势说新语」浅谈软件许可证

安势信息

开源 软件 许可证 开源软件 开源软件供应链

实时视频在弱网下的极限通信

Damon

7月月更

新星计划Day7【数据结构与算法】 栈Part1

京与旧铺

7月月更

浅入浅出mybatis(四)

ES_her0

7月月更

LaTex笔记(Windowns)

乌龟哥哥

7月月更

微信业务架构图&“学生管理系统”毕设架构设计

gump

架构实战营

长安链研究笔记-数据存储

长安链

AWS Inspector

冯亮

云计算 DevOps security AWS

实习过后的人都怎么样了?

KEY.L

7月月更

容器应用发布三大方案

穿过生命散发芬芳

容器应用 7月月更

Java方法重载及递归

未见花闻

7月月更

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