目录

MessagePack 概述

MessagePack 快速启动


MessagePack 概述

1、MessagePack 是一种高效的二进制序列化格式,它允许您在 JSON 等多种语言之间交换数据,但它更快速更小巧。小整数被编码为单个字节,典型的短字符串除了字符串本身之外只需要一个额外的字节。

2、MessagePack 官网地址:https://msgpack.org/

3、MessagePack Java 模块 GitHub 开源地址:https://github.com/msgpack/msgpack-java

4、MessagePack Java 文档地址:http://www.javadoc.io/doc/org.msgpack/msgpack-core/0.8.16

5、核心压缩方式可参看官方说明:https://github.com/msgpack/msgpack/blob/master/spec.md

6、MessagePack is supported by over 50 programming languages and environments.(MessagePack 支持主流的 50 多种编程语言)

Maven 依赖

1)可以进入 MessagePack 官网地址:https://msgpack.org/,然后选择 “Languages”(语言) 为第一个的 Java,然后右侧 “API” 中就会显示 MessagePack for Java 的 Maven 依赖,以及示例代码。

2)直接从 Maven 仓库中心获取:https://mvnrepository.com/artifact/org.msgpack/msgpack

Maven 仓库中心可以看到所有版本情况,如下所示这是最后一次 2015 更新的版本 0.6.12

<!-- https://mvnrepository.com/artifact/org.msgpack/msgpack -->
<dependency><groupId>org.msgpack</groupId><artifactId>msgpack</artifactId><version>0.6.12</version>
</dependency>

3)MessagePack Java 模块开发包自己依赖了 org.javassist 开发包,所示必须同时导入 msgpack 与 javassist 二进制包或者 Maven 依赖。

4)org.javassist Maven 依赖可以从 Maven 中央仓库获取:https://mvnrepository.com/artifact/org.javassist/javassist

<!-- https://mvnrepository.com/artifact/org.javassist/javassist -->
<dependency><groupId>org.javassist</groupId><artifactId>javassist</artifactId><version>3.24.0-GA</version>
</dependency>

5)org.javassist 二进制 Jar 包可以从 javassist 官网获取:http://www.javassist.org/。点击中间的 “ Download.zip” 即可下载,下载之后进行解压,找到里面的 "javassist.jar" 导入应用中即可。

6)Javassist 是一款字节码编辑工具,可以直接编辑和生成 Java 生成的字节码,以达到对 .class 文件进行动态修改的效果。

二进制 Jar 包获取

获取地址:链接:https://pan.baidu.com/s/1-MzF_bwHseIiXcLO2uLhUg ,提取码:cnuz

MessagePack 快速启动

import org.msgpack.MessagePack;
import org.msgpack.annotation.Message;
import org.msgpack.template.Templates;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/*** Created by Administrator on 2018/11/25 0025.*/
public class MessageTest {/*** 序列化与反序列化 String*/public static void serializesString() {try {/** 创建序列化对象。提示:序列化是针对对象操作的* */String userInfo = "{\"pId\":9527,\"pName\":\"华安\",\"isMarry\":true}";/** org.msgpack.MessagePack 是 java 开发的基本类* 用于创建序列化器与反序列化器*/MessagePack messagePack = new MessagePack();/**序列化指定的对象为字节数组* 提示:这个字节数组与 java.lang.String#getBytes() 返回的字节数组是不一样的* 使用 String(byte bytes[]) 相应返回是得不到正常结果的* 只能再通过 MessagePack 进行反序列化得到结果*/byte[] raw = messagePack.write(userInfo);/*** <T> T read(byte[] bytes, Template<T> tmpl)* 根据模板将对象反序列化为对象,同一个 API 解决* 这个模板就是制定序列化的数据类型*/String dst1 = messagePack.read(raw, Templates.TString);System.out.println(dst1);//输出:{"pId":9527,"pName":"华安","isMarry":true}} catch (IOException e) {e.printStackTrace();}}/*** 序列化与反序列化 List<String>*/public static void serializesStringList() {try {/** 创建序列化对象* 提示:序列化是针对对象操作的* */List<String> src = new ArrayList<String>();src.add("Java");src.add("IOS");src.add("Android");/** org.msgpack.MessagePack 是 java 开发的基本类* 用于创建序列化器与反序列化器*/MessagePack messagePack = new MessagePack();/**序列化指定的对象为字节数组——————整个序列化过程就是如此简单,一个 API 解决* 提示:这个字节数组与 java.lang.String#getBytes() 返回的字节数组是不一样的* 使用 String(byte bytes[]) 相应返回是得不到正常结果的* 只能再通过 MessagePack 进行反序列化得到结果*/byte[] raw = messagePack.write(src);/*** <T> T read(byte[] bytes, Template<T> tmpl)* 根据模板将对象反序列化为对象* 这个模板就是制定序列化的数据类型*/List<String> dst1 = messagePack.read(raw, Templates.tList(Templates.TString));System.out.println(dst1.get(0));//输出:JavaSystem.out.println(dst1.get(1));//输出:IOSSystem.out.println(dst1.get(2));//输出:Android} catch (IOException e) {e.printStackTrace();}}/*** 序列化与反序列化 POJO* 注意:需要序列化的 POJO 对象上必须加上 org.msgpack.annotation.Message 注解:@Message*/public static void serializesPOJO() {try {/** 创建序列化对象。提示:序列化是针对对象操作的* User 类上必须加上 @Message 注解* */User user = new User();user.setpId(9527);user.setpName("华安");/** org.msgpack.MessagePack 是 java 开发的基本类* 用于创建序列化器与反序列化器*/MessagePack messagePack = new MessagePack();/**序列化指定的对象为字节数组——————整个序列化过程就是如此简单,一个 API 解决* 提示:这个字节数组与 java.lang.String#getBytes() 返回的字节数组是不一样的* 使用 String(byte bytes[]) 相应返回是得不到正常结果的* 只能再通过 MessagePack 进行反序列化得到结果*/byte[] raw = messagePack.write(user);/** read(byte[] bytes, Class<T> c)* 将字节数组反序列化为指定类对象,c 指定 POJO 类即可*/User userFinal = messagePack.read(raw, User.class);System.out.println(userFinal);//输出:User{birthday=null, pId=9527, pName='华安', isMarry=null}System.out.println(userFinal.getpId() + "," + userFinal.getpName());//输出:9527,华安} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {serializesPOJO();}
}/*** 用户* 注意:需要序列化的 POJO 对象上必须加上 org.msgpack.annotation.Message 注解:@Message*/
@Message
class User {private Integer pId;private String pName;private Date birthday;private Boolean isMarry;public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public boolean isMarry() {return isMarry;}public void setIsMarry(boolean isMarry) {this.isMarry = isMarry;}public Integer getpId() {return pId;}public void setpId(Integer pId) {this.pId = pId;}public String getpName() {return pName;}public void setpName(String pName) {this.pName = pName;}public Boolean getIsMarry() {return isMarry;}public void setIsMarry(Boolean isMarry) {this.isMarry = isMarry;}@Overridepublic String toString() {return "User{" +"birthday=" + birthday +", pId=" + pId +", pName='" + pName + '\'' +", isMarry=" + isMarry +'}';}
}

MessagePack 二进制序列化格式 开发入门详解相关推荐

  1. 最强ADI SHARC系列DSP:ADSP-SC589的开发入门详解

    作者的话 ADI的SHARC系列DSP,现阶段最强的型号是SC589,那么我就以SC589为例,写一点资料,让新手能够比较便捷的熟悉开发环境,软硬件,顺利的进入开发. 文档解决的是入门的问题,所以不会 ...

  2. IVX全栈开发入门详解

    近年来,低代码之分愈刮愈烈,低代码平台也层出不穷.对于开发者来说,一个好的开发平台能够让开发者犹如神助,进行快速开发.在使用过众多的低代码开发平台中,大家都给我推荐IVX.我也体验了一段时间.这篇文章 ...

  3. VC#版DirectX开发入门详解

    一 首先需要安装DirectX SDK, 可在 http://download.microsoft.com/download/F/1/7/F178BCE4-FA19-428F-BB60-F3DEE11 ...

  4. MessagePack:一种高效二进制序列化格式

    MessagePack是一种高效二进制序列化格式.可以在多种语言中进行快速数据交换,比如JSON格式等.这种格式小巧快速,多个小整数会压缩成一个字节,通常短字符串压缩后只比原来长度增加1个字节.Mes ...

  5. MessagePack简介及使用:一种有效的二进制序列化格式

    Table of Contents 什么是MessagePack MessagePack的压缩原理 msgpack for C/C++ MessagePack是一种有效的二进制序列化格式.它使您可以在 ...

  6. c语言windows驱动编程入门,Windows驱动开发技术详解 PDF扫描版[175MB]

    Windows驱动开发技术详解由浅入深.循序渐进地介绍了windows驱动程序的开发方法与调试技巧.本书共分23章,内容涵盖了windows操作系统的基本原理.nt驱动程序与wdm驱动程序的构造.驱动 ...

  7. FFmpeg入门详解之111:RTSP协议2

    rtsp消息详解 1.RTSP的消息有两大类,一是请求消息(request),一是回应消息(response),两种消息的格式不同. 请求消息格式: 方法 URI RTSP版本 CR LF 消息头 C ...

  8. iOS 7: iPhone/iPad应用开发技术详解

    iOS 7: iPhone/iPad应用开发技术详解 作者:刘一道 出版社:机械工业出版社 出版年:2013-11 页数:507 定价:79.00元 ISBN:9787111440512 样章下载:h ...

  9. FFmpeg入门详解之85:RTSP协议2

    rtsp消息详解 1.RTSP的消息有两大类,一是请求消息(request),一是回应消息(response),两种消息的格式不同. 请求消息格式: 方法 URI RTSP版本 CR LF 消息头 C ...

  10. FFmpeg入门详解之105:m3u8文件格式详解

    简介 M3U8 是 Unicode 版本的 M3U,用 UTF-8 编码."M3U" 和 "M3U8" 文件都是苹果公司使用的 HTTP Live Stream ...

最新文章

  1. 国内拉取google Kubernetes镜像
  2. Cesium源码编译过程
  3. 《51单片机应用开发从入门到精通》——2.6 中断控制功能的作用
  4. 为什么大公司一定要使用DevOps
  5. mysql垃圾清理_mysql 垃圾图片清理
  6. SuperIndicator 专做轮播图库,没有之一,支持无限循环
  7. 使用pytorch实现crnn
  8. 给女朋友道歉的java代码_我用开源工具给女朋友写道歉信!
  9. wannier拟合能带总是拟合不上_科学网—Wannier90输入文件中num_wann, num_bands, 和energy window等参数设置规则 - 李云海的博文...
  10. 数据中台、业务中台、数据仓库、现有信息架构
  11. [JavaScript]如何将www.xxx.com变为com.xxx.www
  12. 关于卸载Nodejs,并且用Nvm管理工具重装nodejs的整合
  13. Redis实现点赞与关注
  14. Android动画之旅-Android动画基本介绍
  15. 利用java格里高利公式求圆周率_C语言用下列公式求pi的近似值,直到最后一项的绝对值小于1e-4为止:...
  16. 不带头结点的单链表操作
  17. Ollydbg手动脱壳得几点小结
  18. 国产芯片也能玩的666,高性价比ADS8688给你崭新试界
  19. 教你如何在低成本、有限的时间里策划裂变100社群_怎么做微信防封群
  20. 【将for循环遍历的数值一行输出】

热门文章

  1. poj 3253 哈夫曼树 经典 运用了优先队列 总和最少
  2. 我在这战斗的一年里(阎阳生)
  3. 【视频】线性混合效应模型(LMM,Linear Mixed Models)和R语言实现案例
  4. js基础知识汇总03
  5. struts教程笔记2
  6. 【鲲鹏HCIA考试】随堂习题卷三
  7. abb机器人gsd文件_ABB机器人控制器死机故障维修
  8. Ubuntu-安装-有道词典
  9. Python实现 N*N 乘法表
  10. 欧几里得算法和唯一分解定理