阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

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

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

关注

评论

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

Android网络连接判断与处理

android 程序员 移动开发

Android自定义DataTimePicker(日期选择器)

android 程序员 移动开发

Android自定义控件开发入门与实战(17)手势检测

android 程序员 移动开发

android进阶篇08、启动速度、卡顿与布局优化简述

android 程序员 移动开发

Android菜鸟6年开发面试字节跳动安卓研发岗,被面试官怼的没话说

android 程序员 移动开发

Android进阶:自定义视频播放器开发(上)

android 程序员 移动开发

Android面试必备!爆火超全的《Android性能优化全方面解析》

android 程序员 移动开发

android解决AlarmManager警报器计时不准,在手机灭屏后延迟的问题

android 程序员 移动开发

Android通讯录开发之取得姓名首字母实现简拼搜索

android 程序员 移动开发

Android通过URI获取文件路径

android 程序员 移动开发

Android面经分享:快手、字节跳动、百度

android 程序员 移动开发

Android面试大全基础篇(校招+社招)含答案

android 程序员 移动开发

Android系统架构概述

android 程序员 移动开发

Android自定义view;实现掌阅打开书籍动画效果

android 程序员 移动开发

Android记录25-WebView实现离线缓存阅读

android 程序员 移动开发

Android进阶——Android跨进程通讯机制之Binder、IBinder

android 程序员 移动开发

Android面试官:“来给我讲讲View绘制?

android 程序员 移动开发

Android面试老生常谈的 View 事件分发机制,看这一篇就够了!

android 程序员 移动开发

Android进程框架:进程的创建、启动与调度流程

android 程序员 移动开发

Android面试主题整理合集(三)

android 程序员 移动开发

Android自定义控件开发入门与实战(6)路径动画

android 程序员 移动开发

Android自定义照相机实现(拍照、保存到SD卡,利用Bundle在Acitivity交换数据

android 程序员 移动开发

Android面试必问:Handler、Bitmap、线程

android 程序员 移动开发

Android面试题之性能优化篇

android 程序员 移动开发

Android缓冲进度条或加载进度条

android 程序员 移动开发

Android触摸屏事件派发机制详解与源码分析三(Activity篇)

android 程序员 移动开发

Android达到什么水平才能顺利拿到 20k 无压力?

android 程序员 移动开发

Android隐藏系统状态栏(沉浸式状态栏)和设置状态栏颜色

android 程序员 移动开发

Android面经分享:从15K到32K,从小厂到大厂,我是如何做到的

android 程序员 移动开发

Android面试官必问的事件分发,你答得上来吗?

android 程序员 移动开发

Android面试题(window、进程、线程篇

android 程序员 移动开发

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