写点什么

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

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

关注

评论

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

阿里云AIoT 经典基础知识 快问快答——基础知识

阿里云AIoT

Serverless 物联网 API 消息中间件 弹性计算

深度学习跟踪DLT (deep learning tracker)

Geek_7ubdnf

深度学习

使用 NineData 访问 SQL Server 数据库

NineData

sql 数据迁移 逻辑备份 NineData SQL Server

IoTLink v1.2.1 最新公告

山东云则信息科技

Java 物联网 springboot

如何利用浮动容器制作悬浮下拉菜单?

Towify

阿里云数据湖3.0解决方案两度登上InfoQ 2022年度榜单

云布道师

阿里云

Curve 文件存储在 Elasticsearch 冷热数据存储中的应用实践

网易数帆

elasticsearch 云原生 分布式存储 curve 企业号 1 月 PK 榜

如何提高Java代码的质量!

风铃架构日知录

Java 程序员 后端 IT 代码规则

GAN:生成对抗网络 Generative Adversarial Networks

Geek_7ubdnf

神经网络

使用MinIO构建分布式文件系统来一次分布式文件系统实战!

风铃架构日知录

Java 程序员 分布式 分布式系统 IT

混沌演练实践(一)

京东科技开发者

测试 混沌工程 系统 混沌测试 企业号 1 月 PK 榜

为什么我们的微服务中需要网关?

江南一点雨

nginx SpringcloudGateway

如何用 7 分钟玩转函数计算?

Serverless Devs

IoT 设备发送 MQTT 请求上云协议讲解——基础知识

阿里云AIoT

缓存 监控 存储 传感器 消息中间件

Java高手速成 | 实现人物拼图游戏

TiAmo

Java 拼图

当我们在谈论DataOps时,我们到底在谈论什么

阿里云大数据AI技术

大数据 运维 数据管理 企业号 1 月 PK 榜

Java二级高速缓存架构设计

元年技术洞察

缓存 数字化转型 二级缓存 Spring Cache Java’

到底什么样的 REST 才是最佳 REST?

小小怪下士

Java 程序员 Rest API

面积曲线AUC(area under curve)

Geek_7ubdnf

图像处理

PCB行业龙头企业*IoTDB | 利用 IoTDB 替换HBase,打破查询功能局限性

Apache IoTDB

MarkDown简明语法手册

Geek_7ubdnf

markdown

MarkDown高阶语法手册

Geek_7ubdnf

markdown

如何使用 Towify 在小程序里实现一个广告轮播图?

Towify

阿里妈妈 Dolphin 智能计算引擎基于 Flink+Hologres 实践

阿里云大数据AI技术

人工智能 大数据 flink 计算引擎 企业号 1 月 PK 榜

CheckStyle使用

soap said

idea插件 格式化代码

传输丰富的特征层次结构以实现稳健的视觉跟踪 Transferring Rich Feature Hierarchies for Robust Visual Tracking

Geek_7ubdnf

神经网络

“天猫双11”背后的流量治理技术与标准实践

阿里巴巴中间件

阿里云 云原生 OpenSergo

IoTLink 轻量级的物联网综合业务支撑平台

山东云则信息科技

Java 物联网 spring-boot

百度工程师带你玩转正则

百度Geek说

正则表达式 开发工具 正则 企业号 1 月 PK 榜

知道这10个让你的API接口突然超时的原因吗?

风铃架构日知录

Java IT java程序员 超时 API接口

Linux挂载硬盘

Geek_7ubdnf

Linux

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