msgpack java lua_使用lua-cmsgpack序列化和反序列化lua对象
原文在简书首发:http://www.jianshu.com/p/badf412db4e7
lua-cmsgpack是一个开源的MessagePack实现方式、纯C的库,没有任何其它依赖,编译后可以直接被lua调用,目前主要支持Lua
5.1/5.2/5.3 版本。
1、什么是MessagePack?
-----------
官方的解释是:
```
It's like JSON.
but fast and small.
```
跟JSON及其类似,但是比JSON更快并且占用空间更小,举个官方给出的例子,直接截官方图:
官方图
翻译官方的解释:
MessagePack是一种高效的二进制序列化格式, 它允许在多种语言(如JSON)之间交换数据,但它越来越小,
小整数被编码为单个字节,典型的短字符串除了字符串本身之外还需要一个额外的字节。
目前市面上流行的开发语言MessagePack几乎支持,官方的地址为:http://msgpack.org/Lua
MessagePack也提供了一套开源库,地址在:https://github.com/fperrad/lua-MessagePack/。
但是,作者使用的是lua-cmsgpack,至于哪个比较优异,作者还没有去比较,主要是先发现了lua-cmsgpack,后面看了下README文件,使用方法应该是差不多的,大家可以拿来参考。
2、编译lua-cmsgpack
---------
lua-cmsgpack包括官方提供的lua-MessagePack都需要自行编译,因为可能平台太多,所以官方没有为每一个平台提供编译好的版本。lua-cmsgpack的github地址为:https://github.com/antirez/lua-cmsgpack
git clone下来之后需要安装cmake工具,mac平台直接在项目目录:
```
cmake .
make
```
即可,当然需要预先安装lua,并且是5.1版本以上的。
主要说下CentOS平台下cmake可能会出现的问题,如果cmake的过程出现以下错误:
```
Could NOT find Lua51 (missing:
LUA_INCLUDE_DIR)
...
CMake Error at CMakeLists.txt:1
(cmake_minimum_required):
CMake 2.8 or higher is required. You are
running version 2.6.4
Configuring incomplete, errors occurred!
```
出现以上错误的话,需要自行安装lua的一些依赖库,一般:
```
yum -y install lua lua-devel
```
就可以了,如果还不行,再试试下面的命令:
```
yum install ncurses-devel gcc gcc-c++ make
```
编译完成之后会生成cmsgpack.so文件,使用的时候直接require进去即可
3、lua调用例子
---------
```lua
1 local cmsgpack =
require "cmsgpack"
2
3 local tba = {1, 2,
3}
4
5 local tbb =
{
6
a = 1,
7
b = 3
8 }
9
10 local msgpack = cmsgpack.pack(tba,
tbb)
11
12 local res1, res2 =
cmsgpack.unpack(msgpack)
13
14 for k, v in pairs(res1)
do
15
print(k, v)
16 end
17
18 for i, v in pairs(res2)
do
19
print(i, v)
20 end
```
运行效果:
```
#lua test_table.lua
1
1
2
2
3
3
a
1
b
3
```
cmsgpack.pack()可以把多个lua对象序列化成一个二进制msgpack,执行反序化的时候会返回对应数量的lua对象,非常的方便。
4、结合redis存储序列化后的msgpack
---------
有趣的是redis也支持MessagePack,因此结合lua和lua-cmsgpack可以产生不错的化学反应,下面是一个简单的例子(结合OpenResty):
```lua
local cmsgpack = require
"cmsgpack"
local redis =
require "resty.redis"
local red
= redis:new()
local ok, err = red:connect("127.0.0.1", 6379)
if not ok then
ngx.say("failed to
connect: ", err)
return
end
local lua_table = {
a
= 1,
b
= 3
}
local msgpack = cmsgpack.pack(lua_table)
local ok, err = red:set("msg",
msgpack)
if not ok then
ngx.say("failed to
set dog: ", err)
return
end
local ret_pack =
red:get("msg")
local ret_table = cmsgpack.unpack(ret_pack)
ngx.say(ret_table.a + ret_table.b)
```
测试返回结果:
```
4
```
在某些场合还是有不错应用场景的。
msgpack java lua_使用lua-cmsgpack序列化和反序列化lua对象相关推荐
- JAVA进阶教学之(序列化和反序列化)
目录 1.序列化Serialize和反序列化的概念 2.序列化和反序列化的代码演示: 3.序列化多个对象(序列化集合) 4.transient关键字将部分属性不参与序列化 1.序列化Serialize ...
- java中的IO流之序列化与反序列化(对象数据和文件的读写交互)
前言必读 读者手册(必读)_云边的快乐猫的博客-CSDN博客 一.知识点介绍 1.什么是序列化与反序列化? 对象与磁盘的交互读写. 2.为什么要学? 2.1在之前的IO流中,都是内存与磁盘进行交互的读 ...
- 当Java泛型擦除遇到JSON序列化和反序列化
当Java泛型类型擦除遇到JSON序列化和反序列化 目录 当Java泛型类型擦除遇到JSON序列化和反序列化 前言 测试 前言 -最近看到了Spring 关于 RestTemplate的源码实现又有了 ...
- java newtonsoft.json_Newtonsoft.Json 的序列化与反序列化
首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framework和NHibernate的.我举例说明DataTable的序列化和反序列化. 创建 ...
- 反序列化 对象 java_Java IO详解(六)------序列化与反序列化(对象流)
1.什么是序列化与反序列化? 序列化:指把堆内存中的 Java 对象数据,通过某种方式把对象存储到磁盘文件中或者传递给其他网络节点(在网络上传输).这个过程称为序列化.通俗来说就是将数据结构或对象转换 ...
- YUDBModel【绿色插件】-对象序列化、反序列化、对象一键增删改查
2019独角兽企业重金招聘Python工程师标准>>> 一.YUDBModel 介绍 架构: 使用runtime和Sqlite实现NSObject扩展类YUDBModel,直接实现( ...
- Java 中关键字transient引出序列化与反序列化
一:transient(临时的)关键字 1.transient关键字只能修饰变量,而不能修饰方法和类.注意,本地变量是不能被transient关键字修饰的. 2.被transient关键字修饰的变量不 ...
- Fastjson 序列化,反序列化Map对象排序问题(字符串转map,map转字符串)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qingfeng812/article/details/61194594 背景 记录项目中遇到的 关于 ...
- Java基础-序列化和反序列化
目录 1.序列化和反序列化概述 2.序列化 3.反序列化 4.序列化多个对象 5.序列化版本号(重要) 1.序列化和反序列化概述 1.java.io.NotSerializableException ...
最新文章
- LeetCode 403 Frog Jump 青蛙过河 Javascirpt 解决方案
- Tomcat6.0.13下配置Tomcat Administration Web Application
- [网络安全提高篇] 一一〇.强网杯CTF的Web Write-Up(上) 寻宝、赌徒、EasyWeb、pop_master
- unity中如何解决镜头穿透模型?
- 2005 打开 2010 项目经验总结
- 根文件系统构建(Yocto方式)
- python 中文处理
- poj2299 ( bit )
- 腾讯京东要建“反阿里联盟”?Python 或成 Excel 官方脚本语言;百度华为在一起 | 一周业界事
- 5g和芯片有什么关系
- 深度搜索(DFS) 和 广度搜索(BFS)
- sql order by 用法
- 软谋在线教育推荐好书(一)
- 《稀缺》塞德希尔·穆来纳森 / 埃尔德·沙菲尔
- 卜算子.咏梅 英文版
- Github项目精选:2021年6月优秀项目推荐
- 基于MSP430G2553点亮TM1637数码管
- Python+Vue计算机毕业设计面向轨道交通的智能服务链系统jop1x(源码+程序+LW+部署)
- Python线程 一
- 机械转行前端,半年零基础自学的心路历程
热门文章
- oracle判断数据出现交叉,Oracle move table分析
- java ios压缩图片,Java、ios图片上传
- 2014北科计算机原理试题答案,北科_计算机组成原理考题-A卷答案
- yii 引用php文件,Yii中引出php文件及插件
- 开机f8修复电脑步骤_电脑无法开机怎么办,8 种情况的修复方法
- dicom虚拟打印服务器,DICOM打印服务器软件
- ARIMA模型之疏系数模型
- 山东大学 2020级数据库系统 实验三
- php post 丢失,php post大量数据时发现数据丢失问题解决方法,post数据丢失_PHP教程...
- 分组后统计总数_大数据时代看排球:排球技术统计能告诉你什么?