2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

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

关注

评论

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

中秋晴朗夜,我们与星月相见

脑极体

21. AI会让人类大量失业吗

Databri_AI

人工智能

Confluence OGNL 注入漏洞的严重安全问题

HoneyMoose

SpringMVC源码分析-HandlerAdapter(3)-RequestMappingHandlerAdapter请求处理

Brave

源码 springmvc 9月日更

带你学会区分Scheduled Thread Pool Executor 与Timer

华为云开发者联盟

线程 线程池 Timer 任务调度 JDK 1.5

分布迁移下的深度学习时间序列异常检测方法探究

云智慧AIOps社区

深度学习 异常检测 技术学习 智能运维 分布迁移

机场做好这道题,才能万户千家共婵娟

脑极体

架构实战营 模块八 作业

脉醉

#架构实战营

设计消息队列存储信息数据的MySQL表格

木云先森

架构训练营

Vue进阶(幺贰陆):表格复用 TypeError: _self.$scopedSlots.default is not a function解决方法

No Silver Bullet

Vue 9月日更

大力出奇迹,揭秘昇腾CANN的AI超能力

华为云开发者联盟

AI 算法 算力 CANN

架构训练营 模块七

小卷儿

架构实战营1期模块八作业——中间件设计

tt

架构实战营

我们应该如何过好自己这一生?

Phoenix

心理学

python 学习笔记:day2——基本数据类型

秦时明月

Python编程

模块八作业

VE

架构实战营

啥都复用不了,还谈什么中台!

菜根老谭

中台 复用 技术管理 平台架构

“十三五”新型显示重大科技成果落地对接及产业发展研讨会召开

科技热闻

在线SQL(Insert/Update)语句转JSON工具

入门小站

工具

架构实战营模块八作业

maybe

[架构实战营]模块八作业

xyu

#架构实战营

消息队列数据存储设计案例-模块八

小牧ah

架构实战营

Apache Hudi 在 B 站构建实时数据湖的实践

Apache Flink

大数据 flink

linux之dd命令

入门小站

Linux

TDSQL全时态数据库的价值和意义

腾讯云数据库

数据库 tdsql

模块八作业

king

作业8

柱林

Prometheus PushGateway 0.9 和 1.0 的区别

耳东@Erdong

Prometheus PushGateway 9月日更

消息队列:RocketMQ事务实现

正向成长

RocketMQ事务

索信达控股:新一代金融知识图谱解决方案的落地应用和研究

索信达控股

金融科技 金融 知识图谱

揭秘腾讯TDSQL全时态数据库系统

腾讯云数据库

数据库 tdsql

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