时隔16年Jeff Barr重返10.23-25 QCon上海站,带你看透AI如何重塑软件开发! 了解详情
写点什么

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

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

关注

评论

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

金三银四助力面试-手把手轻松读懂HashMap源码

Java 程序员 后端

我终于知道,中国互联网是怎么弯道超车,干翻美国了!

博文视点Broadview

闭关2个月肝完Java7大核心知识(分布式+JVM+Java基础+算法

Java 程序员 后端

阿里P7告诉你SpringBoot如何防止重复提交?

Java 程序员 后端

逼着面试官问了我ArrayList和LinkedList的区别,他对我彻底服了

Java 程序员 后端

Python爬虫120例之第20例,1637、一路商机网全站加盟数据采集

梦想橡皮擦

11月日更

阿里-美团-字节面试官必问的Mysql锁机制,你真的明白吗

Java 程序员 后端

阿里P8十年摸爬滚打,告诉你上古程序猿为何反对使用Redis?

Java 程序员 后端

阿里P8大牛整理的300页图解网络知识+计算机底层操作系统

Java 程序员 后端

阿里P8直接甩我一份Java笔记、面试宝典,当我看到目录的一瞬间,简直怀疑人生!

Java 程序员 后端

阿里Redis最全面试全攻略,读完这个就可以和阿里面试官好好聊聊

Java 程序员 后端

通过AOP和自定义注解实现请求日志收集功能

Java 程序员 后端

Vue进阶(幺捌叁):IE9兼容性问题-数据初始化问题

No Silver Bullet

Vue 11月日更

阿里2020首发一百多道Java高级岗面试题(含答案)

Java 程序员 后端

阿里P6程序员的Java之路-或许起点不高,但我从未停止我的脚步

Java 程序员 后端

阿里P8级大神经验分享,怎样成为一个优秀的架构师?(1)

Java 程序员 后端

【Flutter 专题】11 图解 ListView 的多种绑定方式

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 11月日更

重走JAVA之路(五):面试又被问线程池原理?教你如何反击(1)

Java 程序员 后端

一个简单的UserCase,带你认识openLooKeng的行级权限控制

LooK

大数据 openLooKeng

华为全球技术服务引领行业数智创新,共赢未来

安装企业级的dokuwiki文档系统

小鲍侃java

11月日更

遇到Java内存溢出(OOM)时,这样排查

Java 程序员 后端

dart系列之:dart语言中的异常

程序那些事

flutter dart 程序那些事 11月日更

闲下来的学习时光

Java 程序员 后端

阿里P8架构师汇总了史上101个最牛逼的Java技术点

Java 程序员 后端

阿里P8面试官梳理的2020年999道大厂高频Java面试题(附答案)

Java 程序员 后端

阿里Java架构师春招面试高频600题:集合+JVM+Redis+并发

Java 程序员 后端

拥有一台服务器后,我竟然这么酷?

老表

Python Linux web开发 云服务器 跟老表学云服务器

重走JAVA之路(五):面试又被问线程池原理?教你如何反击

Java 程序员 后端

阿里P8大佬终于把自己珍藏多年581页JavaJDK9学习笔记分享出来了

Java 程序员 后端

阿里P8大牛透出,入职阿里必备12套Java面试题,适合从校招到社招

Java 程序员 后端

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