深圳建设局招标网站,做网站备案是承诺书在哪下载,wordpress媒体选项,网站建设的ppt模板下载目录 简述如何集成#xff1f;如何使用序列化 反序列化 参考 简述
项目里需要使用LUA脚本将数据记录到文件#xff0c;要方便的增加、查找、删除#xff0c;要方便的加载与存回。 使用序列化/反序列化 lua table可以很容易实现这些功能。 序列化将table转换为字符串 反序列… 目录 简述如何集成如何使用序列化 反序列化 参考 简述
项目里需要使用LUA脚本将数据记录到文件要方便的增加、查找、删除要方便的加载与存回。 使用序列化/反序列化 lua table可以很容易实现这些功能。 序列化将table转换为字符串 反序列化将table从字符串中恢复出来 如何集成
进入https://github.com/pkulchenko/serpent下载serpent.lua, 将这个文件复制到lua可见的地方比如工程目录一级路径。我这里放到了LUA的同级路径通过测试发现可以require到这个模块。
如何使用
序列化或者反序列化之前要先加载serpent模块
serpent_handle require serpent
assert(serpent_handle)序列化
首先我们构建一个即将序列化的tabletable中包含按照下标顺序递增的数据包含字典数据包含子表内容如下
local Send_Table {1,2,3,[name] winston,age 16,child_table {hair_length 1000,hair_color Black}
}serpent提供三种序列化APIdumpline, block三者没有太多的区别dump是全功能的line和block没有办法做表的自我引用。 向这些函数中输入一个表作为形参函数将会返回序列化之后的字符串 我们把每一种都打印出来观察一下
--store_string serpent_handle.dump(Send_Table)
--print(store_string)do local _{[1]1,[2]2,[3]3,namewinston,age16,child_table{hair_colorBlack,hair_length1000}};return _;end--store_string serpent_handle.line(Send_Table)
--print(store_string){1, 2, 3, age 16, child_table {hair_color Black, hair_length 1000} --[[table: 000002a2d1245120]], name winston} --[[table: 000002a2d12458a0]]--store_string serpent_handle.block(Send_Table)
--print(store_string){1,2,3,age 16,child_table {hair_color Black,hair_length 1000} --[[table: 0000028afdd050e0]],name winston
} --[[table: 0000028afdd05a20]]可以看出dump似乎是一个函数返回定义的local表_ line像是把表的内存都定义到了不知道有什么用所有信息记录到一行。 block就是line插入回车的版本。
拿到这些字符串之后我们就可以将其存入文件保存下来了文件I/O不在本文讨论范围参考https://www.runoob.com/lua/lua-file-io.html
好吧为了下一节的流畅叙述还是贴个代码
file_handle io.open(store.txt, w)
io.output(file_handle)
io.write(store_string)
io.close()反序列化
我们把store.txt里的内容修改一下 我们希望把修改过的数据反序列化到另一个表Recv_Table里并且打印各个成员 反序列化使用如下反序列化只有一个形参string有两个返回值ok和res。ok指示反序列化是否成功res是反序列化后的表
ok, res serpent.load(string)测试代码如下
serpent_handle require serpent
assert(serpent_handle)file_handle io.open(store.txt, r)
io.input(file_handle)
local ok, Recv_Table serpent_handle.load(io.read(a*))
io.close()print(Recv_Table[1]:..Recv_Table[1])
print(Recv_Table[2]:..Recv_Table[2])
print(Recv_Table[3]:..Recv_Table[3])
print(age:..Recv_Table.age)
print(hair_color:..Recv_Table.child_table.hair_color)
print(name:..Recv_Table.name)现象如下
参考
更多信息参考https://github.com/pkulchenko/serpent