设为首页 加入收藏

TOP

lua序列化(支持循环引用)(二)
2014-11-23 19:00:31 】 浏览:310
Tags:lua 序列化 支持 循环 引用
tr = string.format("%s=%s", keystr, valuestr)
table.insert(container, keyvaluestr)
end
end
return string.format("{%s}", table.concat(container, ","))
end
调用table的序列化
local function ser(var, enc)
assert(type(var)=="table")
-- 标记所有出现的table, 并记录其key, 用于处理循环引用
local mark = {}
-- 用于记录循环引用的赋值语句
local assign = {}
-- 序列化表, ret字符串必须与后面的loca ret=%s中的ret相同,因为这个ret可能也会组织到结果字符串中。
local ret = table_ser(var, "ret", mark, assign)
local ret = string.format("local ret=%s %s return ret", ret, table.concat(assign, ";"))
return (enc==nil or enc==true) and string.dump(loadstring(ret)) or ret
end
mark:处理循环引用最重要的就是mark表,它记录了已经序列化的表和其完整key路径
assgin: 记录循环引用的后期赋值语句,将这些语句拼接到表构造之外
序列化后就是一个lua的table创建并赋值的代码字符串,所以可以使用loadstring直接加载,加载后是一个chunk,可以当作函数运行就返回结果
序列化加密
string.dump(loadstring(ret))
这就是加密的代码,因为string.dump参数必须是function, 所以使用loadstring将字符串加载成chunk,然后在由string.dump导成字节码
其实就是使用了string.dump函数,它可以function导成二进制字节码,使用它处理一下就可以把明文字符串转成字节码了
完整代码见我github中的luaser
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇二叉排序树 下一篇Java数据结构学习笔记之栈和队列..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目