写点什么

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

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

关注

评论

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

愉悦圣诞 暖意融心

龙智—DevSecOps解决方案

Spring核心原理之IoC容器初体验(2)

Tom弹架构

Java spring 源码

动手用 Java 训练深度学习模型

亚马逊云科技 (Amazon Web Services)

AI/ML

提升产品创新能力?试试斯坦福大学设计思维模型!

恒生LIGHT云社区

设计 产品设计 创新 设计思维

新手入门:史上最全Web端即时通讯技术原理详解

BeeWorks

Linux之tail命令

入门小站

Linux

DataPipeline与海量数据完成产品互认证,助推数据管理信创生态新进程

DataPipeline数见科技

数据库 中间件 数据融合 数据迁移 数据管理

热点浅谈:著名主播“薇娅”究竟是怎么赚钱的?

优秀

直播带货 薇娅

云小课|DGC数据开发之基础入门篇

华为云开发者联盟

大数据 数据湖治理中心 云数据开发 DLF

用一个 flv.js 播放监控的例子,带你深撅直播流技术

杨成功

JavaScript 前端 监控 直播 流媒体

在线上传图片二维码识别解析

入门小站

工具

解决 GitLab 报错:You are not allowed to force push code to a protected branch on this project

AlwaysBeta

git gitlab

我们开源了一个轻量的 Web IDE UI 框架

Ziv 小威

ide 开源 vscode React WebIDE

实力超越,绝对领先——Amazon SageMaker 在企业 MLOps 平台报告中获得高度肯定

亚马逊云科技 (Amazon Web Services)

AI/ML

从新手到专家:如何设计一套亿级消息量的分布式IM系统

BeeWorks

React vs Angular,到底那个更好用

编程江湖

前端开发

python 数据分析找到老外最喜欢的中国美食【完整代码】

1_bit

Python

大数据开发之sparkSQL的使用分享

@零度

大数据 Sparksql

HDFS(Hadoop分布式文件系统)

编程江湖

大数据 hdfs

盘点一下自己的2021

为自己带盐

28天写作 12月日更 盘点2021

图解带你掌握`JVM`运行时核心内存区

华为云开发者联盟

Java JVM 内存 堆内存

专家视野:探寻运维趋势与ITSM落地之道

龙智—DevSecOps解决方案

运维 ITSM

Coder 投稿 | mPaaS 的多版本接入(Android)

蚂蚁集团移动开发平台 mPaaS

android Android Studio mPaaS 移动应用开发

使用Amazon Step Functions Data Science SDK创建基于无服务器架构的工作流

亚马逊云科技 (Amazon Web Services)

AI/ML

Linux之tail命令

入门小站

Linux

常见开源分布式文件系统架构对比

Juicedata

hdfs 开源 文件系统 云存储 分布式文件系统

Amazon Forecast现可支持对单一条目进行准确性评估

亚马逊云科技 (Amazon Web Services)

AI/ML

在 Amazon Inferentia 上为 PyTorch 自然语言处理应用程序实现 12 倍的吞吐量和低延迟

亚马逊云科技 (Amazon Web Services)

AI/ML

通过自动关闭Amazon SageMaker Studio中的闲置资源来节省成本

亚马逊云科技 (Amazon Web Services)

AI/ML

Amazon SageMaker新玩法——定制你的语音识别模型

亚马逊云科技 (Amazon Web Services)

AI/ML

再说绩效考核

张老蔫

28天写作

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