zoukankan      html  css  js  c++  java
  • 使用lua做序列化和反序列化

    -- lua对象序列化
    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 .. "{
    "
            for k, v in pairs(obj) do
                lua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",
    "
            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) .. ",
    "
                end
            end
            lua = lua .. "}"
        elseif t == "nil" then
            return nil
        else
            error("can not serialize a " .. t .. " type.")
        end
        return lua
    end
    setfenv(serialize, {type = _G.type, tostring = _G.tostring, error = _G.error})
    
    -- lua对象反序列化
    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
    setfenv(unserialize, {type = _G.type, tostring = _G.tostring, error = _G.error, loadstring = _G.loadstring})

    使用方法:

    local tbl = {a = 1, b = 2}

    local seri_str = serialize(tbl)

    local new_tbl = unserialize(seri_str)

    转载请注明出处, from 博客园HemJohn

  • 相关阅读:
    【HDU2050】折线分割平面
    【Codevs1183】泥泞的道路
    Pair
    【Poj 1832】连环锁
    【Poj1090】Chain
    【UVa 10881】Piotr's Ants
    【Codeforces】665E Beautiful Subarrays
    【T^T】【周赛】第一周周赛——欢迎16级的新同学
    【OI新闻】2016.10.09
    二分图的最大匹配
  • 原文地址:https://www.cnblogs.com/HemJohn/p/6409633.html
Copyright © 2011-2022 走看看