一、MessagePack简介

MessagePack是更快,更小的数据传输格式,类似Json,支持多语言,比如Java ,C,C++ , 可以跨平台。比如可以用于Mqtt协议,在物联网和服务平台通讯中节省流量,提升效率。

二、Java两种加解包

方式一

数据格式

{

"address":{

"city":"广州",

"street":"万达广场"

},

"sex":"男",

"name":"张三",

"age":31

}

maven引入依赖包

org.msgpack

msgpack

0.6.10

数据压包

Map userInfo = new HashMap<>();

userInfo.put("name","张三");

userInfo.put("age",31);

userInfo.put("sex","男");

Map addr = new HashMap<>();

addr.put("city","广州");

addr.put("street","万达广场");

userInfo.put("address",addr);

System.out.println(JSON.toJSONString(userInfo));

MessagePack messagePack = new MessagePack();

byte[] data = messagePack.write(userInfo);

System.out.println(HexUtils.byte2hexString(data));

输出十六进制

84A76164647265737382A463697479A6E5B9BFE5B79EA6737472656574ACE4B887E8BEB

EE5B9BFE59CBAA3736578A3E794B7A46E616D65A6E5BCA0E4B889A36167651F

前两位含义:数字8代表Map类型,4代表有4个值

解包代码

Map message = messagePack.read(data,

Templates.tMap(Templates.TString,Templates.TValue));

System.out.println(message);

//{name="张三", address={"city":"广州","street":"万达广场"}, age=31, sex="男"}

方式二

maven引入依赖包

org.msgpack

msgpack-core

0.8.17

方式2代码

MessageBufferPacker packer = MessagePack.newDefaultBufferPacker();

//数字类型

packer.packInt(32);

//字符类型

packer.packString("李四");

// arrays类型

int[] arr = new int[] {4, 8, 1, 0, -7, 23};

packer.packArrayHeader(arr.length);

for (int v : arr) {

packer.packInt(v);

}

// map类型

packer.packMapHeader(2);

packer.packString("age");

packer.packInt(1);

packer.packString("sex");

packer.packInt(2);

//字节数组类型

byte[] byteData = new byte[] {1, 2, 3, 4, 5, 6, 7};

packer.packBinaryHeader(byteData.length);

packer.writePayload(byteData );

System.out.println(HexUtils.byte2hexString(packer.toByteArray()));

//解包

MessageUnpacker unpacker =

MessagePack.newDefaultUnpacker(packer.toByteArray());

int age = unpacker.unpackInt();

System.out.println(id);

String name = unpacker.unpackString();

System.out.println(name);

int length = unpacker.unpackArrayHeader();

int[] array = new int[length];

for (int i = 0; i < length; ++i){

array[i]=unpacker.unpackInt();

}

System.out.println(Arrays.toString(array));

// 解析Map类型

int maplen = unpacker.unpackMapHeader();

for (int j = 0; j < maplen; j++) {

System.out.println(unpacker.unpackString());

System.out.println(unpacker.unpackInt());

}

//解析byte二进制类型

int binaryLen = unpacker.unpackBinaryHeader();

//按长度读取二进制数据

byte[] bytes = new byte[binaryLen];

unpacker.readPayload(bytes);

System.out.println(Arrays.toString(bytes));

packer.close();

总结

MessagePack的两种加解包方式可以灵活使用,第一种测试Map类型中有二进制类型,解析出来是乱码,可以通过第二种方式进行加解包解析。

通过jar中的丰富方法,可以灵活使用,是比Json更省流量的数据协议

java messagepack_MessagePack解析实例Java相关推荐

  1. java通用解析excel,java解析excel

    import java.io.File; import java.io.IOException; import jxl.Cell; import jxl.Sheet; import jxl.Workb ...

  2. 连连看java代码解析,连连看java代码(2) | 学步园

    接上篇,还剩下主功能模块的代码没贴.连连看 连连看算法 如图, 为了找出A, B两点之间的连接路径, 首先过这两点作4条线段, 线段的两端便是地图边缘, 两条与横坐标轴平行, 另两条与纵坐标轴平行. ...

  3. java反射经典实例 Java Reflection Cookbook

    Java提供了一套机制来动态执行方法和构造方法,以及数组操作等,这套机制就叫--反射.反射机制是如今很多流行框架的实现基础,其中包括Spring.Hibernate等.原理性的问题不是本文的重点,接下 ...

  4. java静态多态实例,java多态

    市面上对于多态往往有两种说法,一种是多态是通过方法的重载和方法的重写来实现多态,另外一种是父类型的引用指向子类型的对象或者接口类型的引用指向实现接口的类的实例. 其实两种说法都不全面,首先,要从字面上 ...

  5. java中jcf实例,java 集合框架(JCF)

    Java Collection Framework = java 集合框架 (JCF) 集合可理解为一个容器,该容器主要指映射(map),集合(set),列表(list),散列表(hashtable) ...

  6. java jxl 解析excel,java使用jxl解析Excel

    废话不多说,直接扔代码. //使用jxl需要导入的类 import jxl.Cell; import jxl.CellType; import jxl.Sheet; import jxl.Workbo ...

  7. java中事务实例,Java Spring 事务管理器入门例子教程(TranscationManager)

    注:阅读本文之前请务必有上文的基础 本文我们使用的事务管理器(TranscationManager)的作用是保证一组数据库操作的原子性.保证在操作时,如果出现异常,事务管理器会将状态恢复到进行本组操作 ...

  8. 【Java基础】Java基础100实例

    [学习参考资料]:菜鸟教程-Java教程 通过菜鸟教程-Java教程的初步学习,现将其教程训练代码汇聚成篇. 菜鸟教程-Java Coding学习笔记 Applet应用程序实例 文档注释演示实例 序列 ...

  9. Java动态解析域名

    Java动态解析域名 Java提供InetAddress类,可以对域名-IP进行正向.逆向解析. InetAddress解析的时候一般是调用系统自带的DNS程序. linux 默认的DNS方式是读取/ ...

最新文章

  1. ABP入门系列(7)——分页实现
  2. Android studio aar包多层嵌套,Add library ‘Gradle: __local_aars__: 。。。unspecified@jar‘ to classpath
  3. 关于HTTPS认证,这里解决你所有疑惑
  4. 简明java_简明 Java 错误处理机制
  5. [转载] 民兵葛二蛋——第31集
  6. Kubernetes详解(七)——Service对象部署和应用
  7. gb2312和utf8 转换
  8. 模式识别--绪论 什么是模式识别?模式识别的主要方法及具体应用
  9. 移动硬盘内容变成快捷方式处理
  10. Python编程定义函数参数的小tips
  11. 量化投资03---小市值轮动因子---准备工作01
  12. html鼠标跟踪特效,HTML5 WebGL带鼠标跟踪的月晕涟漪动画特效
  13. 《逆龄大脑:保持大脑年轻敏锐的新科学》读书笔记
  14. 基于分布式的智联招聘数据的大屏可视化分析与预测
  15. STM32学习之路——麒麟座V3.2开发板蜂鸣器发声问题
  16. 耳麦不能讲话怎么办?
  17. C语言 打印2的n次方
  18. Element日期选择器带快捷选项切换日期类型
  19. pkpm钢结构建模步骤_pkpm钢结构建模步骤 [钢结构平台计算书]
  20. 【C++】Dijkstra算法

热门文章

  1. 1043 幸运号码 数位dp
  2. indesign2019怎么存低版本_新增功能和增强功能 | InDesign 2019 版
  3. ubuntu12.04开启3D特效
  4. 【ThreeJS】拓扑圆形布局算法
  5. java 视频处理 mencoder
  6. Ue4 一个场景中多个玩家之间切换控制权
  7. [线段树]打字练习2
  8. java兔子繁殖总数_【Java基础编程练习】01:兔子繁殖问题(斐波那契数列)的分析及实现...
  9. 板材切割优化软件CutLogic 2D 5.6 Crack
  10. 多媒体课件是不是计算机软件,使用Authorware 开发的《多媒体技术》课件属于( )。...