50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

关注

评论

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

成本节省 50%,10 人团队使用函数计算开发 wolai 在线文档应用

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算

老板对技术部产出不满意怎么办?

石云升

产品思维 职场经验 管理经验 5月月更

单片机开发入门知识介绍

DS小龙哥

5月月更

拆分电商系统为微服务

踩着太阳看日出

架构训练营

比特币价格预测两极分化:跌至1万美元还是涨至10万美元?

CECBC

【LeetCode】交换链表中的节点Java题解

Albert

LeetCode 5月月更

拆分电商系统为微服务

流火

【ELT.ZIP】OpenHarmony啃论文俱乐部——多层存储分级数据压缩

ELT.ZIP

鸿蒙 数据压缩 ELT.ZIP HCompress

架构模块六

小马

「架构实战营」

【ELT.ZIP】OpenHarmony啃论文俱乐部——人工智能短字符串压缩

ELT.ZIP

人工智能 鸿蒙 数据压缩 ELT.ZIP

【ELT.ZIP】OpenHarmony啃论文俱乐部——电子设备软件更新压缩

ELT.ZIP

鸿蒙 rsync 数据压缩 ELT.ZIP

阿里巴巴在 Envoy Gateway 的演进历程浅析

阿里巴巴云原生

阿里云 Kubernetes 云原生

计算机网络——物理层

工程师日月

计算机网络 5月月更

提效客户体验管理:结合 K-Means 聚类和 RFM 模型的客户分群

龙国富

RFM 客户分群 K-Means

《SaaS产品经理从菜鸟到专家》读书笔记

圣迪

产品 产品经理 SaaS tob tob产品

架构实战营模块 6 作业

热猫

九、云原生链路追踪

穿过生命散发芬芳

链路追踪 5月月更

flask框架的学习笔记【二】

恒山其若陋兮

5月月更

AI简报-逆光也清晰-色彩增强算法CURL

AIWeker

人工智能 深度学习 5月月更 AI简报

为了兼容IE,配置Babel+Webpack

空城机

webpack 5月月更

HashMap 源码分析-基础结构

zarmnosaj

5月月更

聊聊我对质量度量的看法

老张

软件测试 质量保障

微信朋友圈高性能架构设计

极客土豆

最好用的 8 款 React Datepicker 时间日期选择器测评推荐

蒋川

react.js 组件 组件库 低代码平台 Javascript框架

Java Core「2」synchronized 关键字

Samson

学习笔记 5月月更 Java core

在线HTML转XML工具

入门小站

工具

运动健康深入人心,MOVE PROTOCOL引领品质生活

BlockChain先知

Nacos 开源之夏 2022 来了

阿里巴巴云原生

阿里云 开源 微服务 云原生 nacos

Bigdata 作业 第11周

Pyel

拆分电商系统为微服务

大眼喵

「架构实战营」

在线火星文转换器工具

入门小站

工具

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