关于LUA程序设计对象序列化学习笔记

移动开发 iOS
关于LUA程序设计对象序列化学习笔记是本文要介绍的内容,主要是来学习LUA中对象的序列化,具体内容的详解来看本文。

关于LUA程序设计对象序列化学习笔记是本文要介绍的内容,主要是来学习LUA对象序列化,具体内容的详解来看本文。

通常需要序列化一些数据,也就是将数据转换为一个字节流或字符流,然后就可以将其方便的持久化。文本序列化可选择的格式非常多:SOAP、Json甚至自定义xml等,不过lua脚本也是一个不错的选择方案。

本文在参考《Lua程序设计(第2版)》简体中文版 详解LUA脚本语言之数据文件与持久化 基础上给出下面的实现。要注意的是该实现只能针对无环的table,并且不能对function、thread、userdata这三种类型进行序列化和反序列化。为了防止序列化后数据过大,也没有做精细的排版控制。

  1. function serialize(obj)  
  2.     local lua = "" 
  3.     local t = type(obj)  
  4.     if t == "number" then  
  5.         lualua = lua .. obj  
  6.     elseif t == "boolean" then  
  7.         lualua = lua .. tostring(obj)  
  8.     elseif t == "string" then  
  9.         lualua = lua .. string.format("%q", obj)  
  10.     elseif t == "table" then  
  11.         lualua = lua .. "{\n"  
  12.         for k, v in pairs(obj) do  
  13.             lualua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",\n"  
  14.         end  
  15.         local metatable = getmetatable(obj)  
  16.         if metatable ~= nil and type(metatable.__index) == "table" then  
  17.             for k, v in pairs(metatable.__index) do  
  18.                 lualua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",\n"  
  19.             end  
  20.         end  
  21.         lualua = lua .. "}"  
  22.     elseif t == "nil" then  
  23.         return nil  
  24.     else  
  25.         error("can not serialize a " .. t .. " type.")  
  26.     end  
  27.     return lua  
  28. end  
  29.  
  30. function unserialize(lua)  
  31.     local t = type(lua)  
  32.     if t == "nil" or lua == "" then  
  33.         return nil  
  34.     elseif t == "number" or t == "string" or t == "boolean" then  
  35.         lua = tostring(lua)  
  36.     else  
  37.         error("can not unserialize a " .. t .. " type.")  
  38.     end  
  39.     lua = "return " .. lua  
  40.     local func = loadstring(lua)  
  41.     if func == nil then return nil end  
  42.     return func()  
  43. end  
  44.  
  45. data = {["a"] = "a", ["b"] = "b", [1] = 1, [2] = 2, ["t"] = {1, 2, 3}}  
  46. print(serialize(unserialize(1)))  
  47. print(serialize(unserialize(serialize(data)))) 

小结:关于LUA程序设计对象序列化学习笔记的内容介绍完了,希望通过本文的学习能对你有所帮助!

责任编辑:zhaolei 来源: 网易博客
相关推荐

2009-11-17 16:32:54

PHP对象序列化

2011-08-25 10:35:14

Lua语言函数

2013-12-12 16:30:20

Lua脚本语言

2010-08-09 09:20:51

Flex程序设计

2011-08-22 17:41:23

LUA 脚本 语言

2011-08-23 17:33:08

LuaMetatable

2011-06-01 15:05:02

序列化反序列化

2011-08-23 16:22:45

Lua 4.0函数

2018-03-19 10:20:23

Java序列化反序列化

2011-07-05 16:05:43

面向对象编程

2009-06-14 22:01:27

Java对象序列化反序列化

2011-08-23 13:15:37

LUAPackage

2011-07-05 15:59:57

面向对象编程

2011-07-05 15:22:04

程序设计

2012-04-13 10:45:59

XML

2011-08-25 10:07:24

Lua 5.0函数编译器

2022-06-07 14:13:58

Simula编程语言GNU cim

2014-04-16 11:39:52

2011-08-23 16:14:27

Lua函数库函数

2011-06-01 14:26:11

序列化
点赞
收藏

51CTO技术栈公众号