写点什么

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

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

关注

评论

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

5 大场景上手通义灵码企业知识库 RAG

阿里巴巴云原生

阿里云 云原生 通义灵码

探究Python中的函数与模块

我再BUG界嘎嘎乱杀

Python 编程 后端 函数 开发语言

Spring中的动态表达式SpEL

SpEL表达式 SpEL @Value

DDD-14-工厂设计

南山

领域驱动设计 DDD

从构思到上线:深入解析海外1v1视频聊天应用核心功能与技术开发指南

山东布谷科技胡月

一对一视频聊天系统 海外直播 国际版社交APP 社交APP源码 聊天APP源码

超级自动化:流程资产开启企业数字化转型新纪元

望繁信科技

数字化转型 流程挖掘 流程资产 流程智能

DDD-8-实体设计

南山

DDD-10-值对象设计

南山

领域驱动设计 DDD 值对象

AI 驱动的产品全生命周期:从概念设计阶段到生命周期的全面管理

Altair RapidMiner

人工智能 AI 数据分析 仿真 智能制造

聚合博客网址导航大全代码分享

博客趣

个人博客 博客导航 博客大全 博客趣

可以在mac电脑玩Red Alert红色警戒:红警 for Mac合集

你的猪会飞吗

红色警戒 mac软件下载 Mac游戏下载

DDD-9-聚合划分

南山

领域驱动设计 DDD 聚合根

DDD-15-数据库设计

南山

领域驱动设计 DDD 数据库设计

DDD-17-CQRS

南山

领域驱动设计 DDD CQRS

打造敏捷开发环境:JNPF低代码平台的实践与探索

不在线第一只蜗牛

敏捷开发 低代码

5 大场景上手通义灵码企业知识库 RAG

阿里云云效

阿里云 云原生 通义灵码

DDD-11-领域服务

南山

领域驱动设计 DDD 领域服务

DDD-13-仓储设计

南山

领域驱动设计 DDD 仓储 资源库

Steam全球服务器遭遇大规模DDoS攻击,崩溃细节曝光!!!

网络安全服务

服务器 DDoS steam DDoS 攻击 黑神话悟空

云知声多模态模型:实时多模态输入输出;独立于 Siri ,苹果或开发新 AI 用于机器人丨 RTE 开发者日报

声网

豆包大模型全面落地行业,助力企业打造专属智能体

极客天地

十种超赞的 MyBatis 写法!

秃头小帅oi

如何使用 NFTScan NFT API 在 Gravity 网络上开发 Web3 应用

NFT Research

NFT\ NFTScan API】

活动回顾丨云原生开源开发者沙龙上海站回放 & PPT 下载

阿里巴巴云原生

阿里云 开源 云原生

DDD-12-领域事件

南山

领域驱动设计 DDD 领域事件

加密游戏的未来:Telegram机器人如何彻底改变加密挖矿

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 公链开发

如何快速分析新代币:15 分钟内做出明智的交易决策

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 公链开发

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