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

  • 相关阅读:
    Java 过滤器
    理解Java中的弱引用(Weak Reference)
    AOP编程
    利用ThreadLocal管理事务
    Redis设计与实现-附加功能
    Redis设计与实现-主从、哨兵与集群
    Redis设计与实现-客户端服务端与事件
    Redis设计与实现-持久化篇
    Redis设计与实现-内部数据结构篇
    重温软件架构设计-程序员向架构师转型必备
  • 原文地址:https://www.cnblogs.com/HemJohn/p/6409633.html
Copyright © 2011-2022 走看看