MessagePack 二进制序列化格式 开发入门详解
目录
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 二进制序列化格式 开发入门详解相关推荐
- 最强ADI SHARC系列DSP:ADSP-SC589的开发入门详解
作者的话 ADI的SHARC系列DSP,现阶段最强的型号是SC589,那么我就以SC589为例,写一点资料,让新手能够比较便捷的熟悉开发环境,软硬件,顺利的进入开发. 文档解决的是入门的问题,所以不会 ...
- IVX全栈开发入门详解
近年来,低代码之分愈刮愈烈,低代码平台也层出不穷.对于开发者来说,一个好的开发平台能够让开发者犹如神助,进行快速开发.在使用过众多的低代码开发平台中,大家都给我推荐IVX.我也体验了一段时间.这篇文章 ...
- VC#版DirectX开发入门详解
一 首先需要安装DirectX SDK, 可在 http://download.microsoft.com/download/F/1/7/F178BCE4-FA19-428F-BB60-F3DEE11 ...
- MessagePack:一种高效二进制序列化格式
MessagePack是一种高效二进制序列化格式.可以在多种语言中进行快速数据交换,比如JSON格式等.这种格式小巧快速,多个小整数会压缩成一个字节,通常短字符串压缩后只比原来长度增加1个字节.Mes ...
- MessagePack简介及使用:一种有效的二进制序列化格式
Table of Contents 什么是MessagePack MessagePack的压缩原理 msgpack for C/C++ MessagePack是一种有效的二进制序列化格式.它使您可以在 ...
- c语言windows驱动编程入门,Windows驱动开发技术详解 PDF扫描版[175MB]
Windows驱动开发技术详解由浅入深.循序渐进地介绍了windows驱动程序的开发方法与调试技巧.本书共分23章,内容涵盖了windows操作系统的基本原理.nt驱动程序与wdm驱动程序的构造.驱动 ...
- FFmpeg入门详解之111:RTSP协议2
rtsp消息详解 1.RTSP的消息有两大类,一是请求消息(request),一是回应消息(response),两种消息的格式不同. 请求消息格式: 方法 URI RTSP版本 CR LF 消息头 C ...
- iOS 7: iPhone/iPad应用开发技术详解
iOS 7: iPhone/iPad应用开发技术详解 作者:刘一道 出版社:机械工业出版社 出版年:2013-11 页数:507 定价:79.00元 ISBN:9787111440512 样章下载:h ...
- FFmpeg入门详解之85:RTSP协议2
rtsp消息详解 1.RTSP的消息有两大类,一是请求消息(request),一是回应消息(response),两种消息的格式不同. 请求消息格式: 方法 URI RTSP版本 CR LF 消息头 C ...
- FFmpeg入门详解之105:m3u8文件格式详解
简介 M3U8 是 Unicode 版本的 M3U,用 UTF-8 编码."M3U" 和 "M3U8" 文件都是苹果公司使用的 HTTP Live Stream ...
最新文章
- 国内拉取google Kubernetes镜像
- Cesium源码编译过程
- 《51单片机应用开发从入门到精通》——2.6 中断控制功能的作用
- 为什么大公司一定要使用DevOps
- mysql垃圾清理_mysql 垃圾图片清理
- SuperIndicator 专做轮播图库,没有之一,支持无限循环
- 使用pytorch实现crnn
- 给女朋友道歉的java代码_我用开源工具给女朋友写道歉信!
- wannier拟合能带总是拟合不上_科学网—Wannier90输入文件中num_wann, num_bands, 和energy window等参数设置规则 - 李云海的博文...
- 数据中台、业务中台、数据仓库、现有信息架构
- [JavaScript]如何将www.xxx.com变为com.xxx.www
- 关于卸载Nodejs,并且用Nvm管理工具重装nodejs的整合
- Redis实现点赞与关注
- Android动画之旅-Android动画基本介绍
- 利用java格里高利公式求圆周率_C语言用下列公式求pi的近似值,直到最后一项的绝对值小于1e-4为止:...
- 不带头结点的单链表操作
- Ollydbg手动脱壳得几点小结
- 国产芯片也能玩的666,高性价比ADS8688给你崭新试界
- 教你如何在低成本、有限的时间里策划裂变100社群_怎么做微信防封群
- 【将for循环遍历的数值一行输出】