写点什么

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

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

关注

评论

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

拥抱AI技术:5月18-19日 全球金牌CSM认证课程 · Jim老师引导讨论AI & Agility话题

ShineScrum

EMQX Platform 产品发布会回顾:全球部署与无缝数据集成,驱动汽车行业智能化转型

EMQ映云科技

mqtt mqtt broker

Python 中删除文件夹下文件的方法详解

霍格沃兹测试开发学社

加密世界:NFT、DeFi和游戏的热点新闻概览

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

淘宝/天猫API接口:轻松获取商品详情原数据

技术冰糖葫芦

流水线运行出错排查难?AI 来帮你

阿里云云效

阿里云 云原生 云效

流水线运行出错排查难?AI 来帮你

阿里巴巴云原生

阿里云 云原生 云效

CentOS 系统常用命令详解

霍格沃兹测试开发学社

京东广告研发 —— 京东推荐广告排序机制演化

京东科技开发者

预测分析中的场景管理,适应不断变化的市场环境

智达方通

企业管理 全面预算管理 财务管理 预算预测分析 场景管理

Python 字符串格式化指南

霍格沃兹测试开发学社

使用 Dockerfile 构建和定制 Docker 镜像

霍格沃兹测试开发学社

选择合适的监控观测平台,为业务出海合规建设减负

观测云

监控 出海

西安站开营!AI 编码助手通义灵码帮大学生“整活儿”

阿里云云效

阿里云 云原生 通义灵码

企业未来都会用上云原生开发工具吗?它有什么优势

Tp_jh

AI 云原生 K8s 多集群管理

企业规模扩大,SD-WAN实现跨省快速组网

Ogcloud

网络协议 网络加速 SD-WAN 企业组网 SD-WAN组网

如何在 Windows 上安装 SQL Server,保姆级教程来了!

霍格沃兹测试开发学社

高可用 - 隔离原则

京东科技开发者

TapData + 实时数仓:实时数据如何赋能船舶制造业,助力数字化应用升级和科学管理运营

tapdata

大数据 实时数仓场景实践

淘宝/天猫按关键字搜索API:返回值详解,轻松获取商品信息

技术冰糖葫芦

api 货币化 API 接口 API 文档 API】 pinduoduo API

5月10-11日·大连线下·CSM认证【提前报名特惠】“全球金牌课程”CST导师亲授

ShineScrum

CSM CSM认证 cst 线下授课

西安站开营!AI 编码助手通义灵码帮大学生“整活儿”

阿里巴巴云原生

阿里云 云原生 通义灵码

离开工位老是忘记锁屏?试着让电脑自动完成这事吧!

京东科技开发者

软件测试学习笔记丨Selenium执行JavaScript脚本

测试人

JavaScript 软件测试 自动化测试 测试开发

淘宝商品详情API接口:全面解析商品属性与数据

技术冰糖葫芦

api 货币化 API 接口 API 文档 API】 pinduoduo API

如何在 Windows 上安装 SQL Server,保姆级教程来了!

霍格沃兹测试开发学社

ETL中元数据处理的方式

RestCloud

数据处理 元数据 ETL 数据集成

Flink 作业管理器:核心功能、角色与责任详解

木南曌

flink 实时计算

用海外云手机做tiktok怎样保障安全性?

Ogcloud

云手机 海外云手机 tiktok云手机 国外云手机 tiktok运营

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