这两年一直都关注这IOCP在网络通信这方面的应用,当然数据的传递是经常需要的。今年接触了MsgPack格式,发现他用来做传输时数据打包真是太爽了。因为他可以直接打包二进制数据,不需要任何的转换。有人会说自己打包也不是什么难事,是的,没错。但是有标准的格式协议,为什么不直接使用。看了下msgpack的协议格式,压缩基本上做到了最大化。http://msgpack.org可以了解下它的协议格式。

我的主要工作是Delphi进行开发,Delphi里面有qmsgpack.自己也写了一个simpleMsgPack用起来都非常舒服,这阵子晚上想看看C#,毕竟C#用来做客户端也是不错的。用了下C#版本的MsgPack 解析,实在是不太习惯,可能我是一个Delphier。后来决定自己写一个SimpleMsgPack的NET版本。现在基本成型。后续还会继续添加一些新的东西。可以上git上面直接下载,也可以NuGet中查找到输入SimpleMsgPack可以进行下载。源码请到github上面下载。如果有什么bug,请一定要联系我,我会尽快安排修复。

编译环境:

VS2013 NET Framework 4.5  (在vs2010下面也是可以编译的, 其他版本没做测试)

开源地址:https://github.com/ymofen/SimpleMsgPack.Net

写了点简单的测试代码。应该大家都看的明白。

MsgPack msgpack = new MsgPack();
msgpack.ForcePathObject("p.name").AsString = "张三";
msgpack.ForcePathObject("p.age").AsInteger = ;
msgpack.ForcePathObject("p.datas").AsArray.Add();
msgpack.ForcePathObject("p.datas").AsArray.Add();
msgpack.ForcePathObject("p.datas").AsArray.Add("李四");
msgpack.ForcePathObject("p.datas").AsArray.Add(3.1415926); // pack file
msgpack.ForcePathObject("p.filedata").LoadFileAsBytes("C:\\a.png"); // pack msgPack binary
byte[] packData = msgpack.Encode2Bytes(); MsgPack unpack_msgpack = new MsgPack(); // unpack msgpack
unpack_msgpack.DecodeFromBytes(packData); System.Console.WriteLine("name:{0}, age:{1}",
unpack_msgpack.ForcePathObject("p.name").AsString,
unpack_msgpack.ForcePathObject("p.age").AsInteger); Console.WriteLine("==================================");
System.Console.WriteLine("use index property, Length{0}:{1}",
unpack_msgpack.ForcePathObject("p.datas").AsArray.Length,
unpack_msgpack.ForcePathObject("p.datas").AsArray[].AsString
); Console.WriteLine("==================================");
Console.WriteLine("use foreach statement:");
foreach (MsgPack item in unpack_msgpack.ForcePathObject("p.datas"))
{
Console.WriteLine(item.AsString);
} // unpack filedata
unpack_msgpack.ForcePathObject("p.filedata").SaveBytesToFile("C:\\b.png");
Console.Read();

输出的结果:

看看是不是适合你。目前还是在测试当中,当然也没有用到具体的项目中。不过后面会慢慢用起来,我准备用来做通信时的数据打包。如果你发现bug,请联系我。

qq:185511468,
email:ymofen@diocp.org

也可以进群[程序员之家 146605007]@我

【SimpleMsgPack.NET】发布一个msgpack协议C#版本的解析开源库的更多相关文章

  1. 【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到Bintray/Jcenter全过程(新),让开源更简单~

    一.写在前面 自使用android studio开始,就被它独特的依赖方式:compile 'com.android.support:appcompat-v7:25.0.1'所深深吸引,自从有了它,麻 ...

  2. [原]发布一个jQuery提示框插件,Github开源附主站,jquery.tooltips.js

    一个简单精致的jQuery带箭头提示框插件 插件写好快一年了,和一个 弹出框插件(点击查看) 一起写的,一直没有整理出来,昨天得功夫整理并放到了github上,源码和网站均可在线看或下载. CSS中的 ...

  3. 一个采用python获取股票数据的开源库,相当全,及一些量化投资策略库

    tushare: http://tushare.waditu.com/index.html 为什么是Python? 就跟javascript在web领域无可撼动的地位一样,Python也已经在金融量化 ...

  4. RTSP RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议

    RTSP 编辑 RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetwo ...

  5. Facebook发布React 16 专利条款改为MIT开源协议

    9 月 26 日,用于构建 UI 的 JavaScript 库 React 16 的最新版本上线. Facebook 最终在现有的两种 React 版本中选择了出现 bug 概率最少的一款.这次版本更 ...

  6. 教你一步步发布一个开源库到 JCenter

    今天想来分享下,如何一步步自己发布一个开源库到 JCenter 这方面的博客网上已经特别多了,所以本篇并不打算仅仅只是记录流程步骤而已,而是尽可能讲清楚,为什么需要有这个步骤,让大伙知其然的同时还知其 ...

  7. 【开源】开发者新闻聚合APP 2.0.3发布(第二个稳定版本)

    聚合了博客园新闻.infoq新闻.36kr新闻.oschina新闻.51cto新闻.csdn新闻: 争取做到随时刷随时有开发者的新闻! 目前还只支持安卓APP 但用的人多了,我会发布苹果版的APP 最 ...

  8. nuget服务器搭建,以及如何发布一个Nuget包

    本文章主要介绍如何将本地dll打包成为一个Nuget包,并如何发布到自己的nuget服务器.章节如下 1. 本地dll如何打包,以及版本的更新 2. 在linux上搭建nuget.server 3. ...

  9. 使用gitbook 发布一个教程文档网站

    gitbook是一个好用的发布电子书的项目:使用gitbook 可以在本地写好文档再远程推送到库:也可以在gitbook提供的在线平台上制作电子书:要想在自己的服务器上使用gitbook 发布一个网站 ...

随机推荐

  1. public-private-protected-默认缺省 的区别

    public 公共,加上这个修饰的属性和方法,可以在程序的任何其它地方访问 . private 私有,和public相反,加上这个修饰的属性和方法,只允许在本类中访问. protected 保护,位于 ...

  2. 使用requests库发起gbk编码的get请求

    有一个爬虫,查询需要发起get请求,这个网站整个都是gbk编码 如果直接发起请求,是不可以的,因为请求参数q首先用utf8编码转化成bytes,然后将bytes进行URLEncode变为字符串. re ...

  3. 实现外卖选餐时两级 tableView 联动效果

    最近实现了下饿了么中选餐时两级tableView联动效果,先上效果图,大家感受一下: 下面说下具体实现步骤: 首先分解一下,实现这个需求主要是两点,一是点击左边tableView,同时滚动右边tabl ...

  4. C语言学习笔记 (002) - C++中引用和指针的区别(转载)

    下面用通俗易懂的话来概述一下: 指针-对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const.volatile等等.见下图 ...

  5. 使用Beetle简单构建聊天室程序

    之前已经讲解了Beetle简单地构建网络通讯程序,那程序紧紧是讲述了如何发送和接收数据:这一章将更深入的使用Beetle的功能,主要包括消息制定,协议分析包括消息接管处理等常用的功能.为了更好的描述所 ...

  6. 【MyBatis】解析MyBatis传入参数的问题

    一.单个参数: public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList&q ...

  7. Firefox 网络调试工具

    1.Firefox 简介 Firefox 官网下载地址 Firefox 其它下载地址 Firefox 58.0.2 for Mac,密码:346y. Firefox 36.0.4 for Mac,密码 ...

  8. 【Linux】字符转换命令join

    join 看字面上的意义 (加入/参加) 就可以知道,他是在处理两个文件之间的数据,而且,主要是在处理『两个文件当中,有 "相同数据" 的那一行,才将他加在一起』的意思.我们利用底 ...

  9. Access2007 操作或事件已被禁用模式阻止解决办法

    在“消息栏”上,单击“选项”. 在“Microsoft Office 安全选项”对话框中,单击“启用此内容”,然后单击“确定”. 如果没有看到消息栏在“数据库工具”选项卡上的“显示/隐藏”组中,单击“ ...

  10. 一个酷绚的linux 桌面程序 GLX-DOCK (cario-dock)

    记录一个酷绚的linux  桌面程序  GLX-DOCK (cario-dock),支持多种风格的桌面主题. http://glx-dock.org/ 优势: 多个workspaces 方便自由切换 ...