數據持久化,序列化,反序列化,文件讀寫1


看了仍是不是很懂,也暫時不知道具體怎麼使用比較方便。json

看了這些,再參考下項目的用法,序列號主要是把table錶轉化成string字符串,使用io文件操做保存到本地文件,加載時經過io加載出來,而後使用loadstring()方法,把string轉化成table的數據。在此要注意的是,table序列化成string時,格式要方便使用loadstring方法。lua


還有一篇文章來自:http://dearymz.blog.163.com/blog/static/2056574200939103246797/ spa


一般須要序列化一些數據,也就是將數據轉換爲一個字節流或字符流,而後就能夠將其方便的持久化。文本序列化可選擇的格式很是多:SOAPJson甚至自定義xml等,不過lua腳本也是一個不錯的選擇方案。設計

    本文在參考《Lua程序設計(第2版)》簡體中文版 第12章 數據與持久化 12.2 和12.2.1 的基礎上給出下面的實現。要注意的是該實現只能針對無環的table,而且不能對function、thread、userdata這三種類型進行序列化和反序列化。爲了防止序列化後數據過大,也沒有作精細的排版控制。code

function serialize(obj)
     local lua = ""
     local t = type(obj)
     if t == "number" then
         lua = lua .. obj
     elseif t == "boolean" then
         lua = lua .. tostring(obj)
     elseif t == "string" then
         lua = lua .. string.format("%q", obj)
     elseif t == "table" then
         lua = lua .. "{\n"
         for k, v in pairs(obj) do
             lua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",\n"
         end
         local metatable = getmetatable(obj)
         if metatable ~= nil and type(metatable.__index) == "table" then
             for k, v in pairs(metatable.__index) do
                 lua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",\n"
             end
         end
         lua = lua .. "}"
     elseif t == "nil" then
         return nil
     else
         error("can not serialize a " .. t .. " type.")
     end
     return lua
 end
 function unserialize(lua)
     local t = type(lua)
     if t == "nil" or lua == "" then
         return nil
     elseif t == "number" or t == "string" or t == "boolean" then
         lua = tostring(lua)
     else
         error("can not unserialize a " .. t .. " type.")
     end
     lua = "return " .. lua      local func = loadstring(lua)
     if func == nil then return nil end
     return func()
 end

data = {["a"] = "a", ["b"] = "b", [1] = 1, [2] = 2, ["t"] = {1, 2, 3}}
local sz = serialize(data)
print(sz)
print("---------")
print(serialize(unserialize(sz)))
orm

相關文章
相關標籤/搜索