写点什么

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

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

关注

评论

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

从零开始学Spring Boot系列-集成Kafka

快乐非自愿限量之名

kafka Spring Boot 后端

有赞畅捷通T+对接无忧,业务体验双升级!

聚道云软件连接器

案例分享

Java22重磅发布!!!!卷不动了,真的卷不动了。。。。

不在线第一只蜗牛

Java 前端 前端开发

Beyond Compare 4 for Mac(好用的文件对比工具) 4.4.7(28397)中文版

iMac小白

PowerPhotos for Mac v2.5.7b3 直装版 mac专用图片管理工具

iMac小白

Go 语法糖 for range 中的 copy 问题

蓬蒿

golang

【教程】高效数据加密混淆方法及实现简介

雪奈椰子

美国对苹果提起反垄断诉讼;周鸿祎:不转向 AI 手机的厂商会成下一个「诺基亚」丨 RTE 开发者日报 Vol.170

声网

策略分析轻松搞定!10款免费可视化模板助你提升分析效率!

彭宏豪95

在线白板 办公软件 效率软件 SWOT boardmix

一个案例,看懂AI Agent厂商的商业落地路径

王吉伟频道

LLM 大语言模型 AI Agent AI智能体 RPA Agent

【教程】深入探究 JS代码混淆与加密技术

AI大模型运维开发探索第三篇:深入浅出运维智能体

阿里云大数据AI技术

运维 智能体 大数据运维

低代码与AI金融时代:重塑金融行业的未来

EquatorCoco

人工智能 AI 低代码 金融

头部银行 AI 落地实践|数据应用赋能经营管理闭环

Kyligence

SideNotes v1.4.14 for Mac激活版 让你随时在 Mac 屏幕上管理笔记

iMac小白

.NET Core 服务实现监控可观测性最佳实践

观测云

.net core

绿色节能|AIRIOT智慧建材能耗管理解决方案

AIRIOT

物联网平台 智慧系统 智慧建材能耗管理

低代码助力企业数智转型

不在线第一只蜗牛

低代码 数智转型

海信电视U8N Pro,用AI算尽 “每一粒沙”

脑极体

AI

GTC 2024 火线评论:GPU 的高效存储利用

XSKY星辰天合

分布式存储 软件定义存储 GTC2024

实时数据采集:选品利器,API接口一网打尽

技术冰糖葫芦

API 接口

新零售SaaS架构:线上商城系统架构设计

快乐非自愿限量之名

架构 零售 SaaS

jackson对象带时间的转换报错,附带fastjson封装工具就填

光进

java‘

热点!浅谈低代码到底是什么?

互联网工科生

游戏直播APP平台开发多少钱成本:定制与成品源码差距这么大

软件开发-梦幻运营部

众安保险AI代码助手DevPilot获奖,全面开源构筑技术新生态

ZA技术社区

深度解析大模型的关键特性与优势

木南曌

#大模型

选择美国高防服务器出租,提升网络防御力

一只扑棱蛾子

美国高防服务器 高防服务器

Prompt进阶系列4:LangGPT(构建高性能Prompt实践指南)--结构化Prompt

汀丶人工智能

人工智能 Prompt工程

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