硬核干货——《中小企业 AI 实战指南》免费下载! 了解详情
写点什么

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

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

关注

评论

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

运维进阶训练营 -W19H

b1a2e1u1u

设计电商秒杀系统

Geek_e5f2e5

架构训练营模块九作业

现在不学习马上变垃圾

架构训练营10期

《动手学深度学习--PyTorch》之学习环境搭建

IT蜗壳-Tango

运维进阶训练营 -W17H

b1a2e1u1u

运维进阶训练营 -W14H

b1a2e1u1u

「Go框架」bind函数:gin框架中是如何绑定请求数据的?

Go学堂

golang 开源 程序员 个人成长

云原生引擎单元测试实践

京东科技开发者

云原生 单元测试 代码覆盖

"我眼中的ChatGPT"征文获奖作品合集

InfoQ写作社区官方

技术专题合集 热门活动 ChatGPT

可观测行之系统如何识别网站有多少文件命中了缓存?

Yestodorrow

可观测性 可观测性用观测云

利用 Amazon Managed Blockchain 发展和扩大忠诚度奖励计划(第一部分)

亚马逊云科技 (Amazon Web Services)

人工智能

App Store 新定价机制 - 2023年最全版

37手游iOS技术运营团队

ios iap In App Purchase App Store Connect API app store

菜单(Menu)

芯动大师

android 控件 menu

运维进阶训练营 -W13H

b1a2e1u1u

SaaS时代下的我们需要什么样的数据库?

陈飞

AIGC导航网站推荐

kcodez

人工智能 AIGC Chat ChatGPT

一种基于实时大数据的图指标解决方案

京东科技开发者

大数据 运维 系统架构 开发 图指标

【程序员日记】---当“微服务”遇到了“电饼铛“

京东科技开发者

架构 微服务 系统架构 开发 企业号 3 月 PK 榜

【云原生 • Docker】用故事给老板讲Docker核心原理

Reactor2020

云原生 ,docker linux namespace

运维进阶训练营 -W18H

b1a2e1u1u

Dubbo Triple 异常处理

昵称不能为null

dubbo triple协议 dubbo异常处理

蚁人与量子停车场

脑极体

AI

如何落地质量门禁?

老张

软件测试 质量保障 质量度量 质量门禁

PyTorch 深度学习实战 | 基于ResNet的花卉图片分类

TiAmo

数据集 PyTorch

运维进阶训练营 -W15H

b1a2e1u1u

运维进阶训练营 -W16H

b1a2e1u1u

Removing HTTP/2 Server Push from Chrome

Yestodorrow

架构实战营10期-模块九作业

炮仗

Java并发夺命23问

程序员大彬

Java Java并发 java面试

GPT-4免费无限制使用教程

南城FE

人工智能 AI 前端 ChatGPT

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