源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Lua中的持久化和序列化详解

  • 时间:2021-06-18 21:03 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Lua中的持久化和序列化详解
[b]持久化[/b] 持久化(Persistence),即把内存中的对象保存到可永久保存的存储设备中。持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。 持久化是将程序数据在持久状态和瞬时状态间转换的机制。(应用与游戏,) JDBC就是一种持久化机制。文件IO也是一种持久化机制。 为什么需要持久化服务呢?那是由于内存本身的缺陷引起的:内存掉电后数据会丢失,但有一些对象是无论如何都不能丢失的,比如银行账号,遗憾的是,人们还无法保证内存永不掉电。 持久化方案可以分为关系数据库方案、文件方案、对象数据库方案、 xml数据库方案,目前主流的持久化方案是关系数据库方案,关系数据库方案不仅解决了并发的问题,更重要的是,关系数据库还提供了持久化服务之外的价值:统计分析功能。 [b]序列化[/b] 将对象的状态信息转换为可以存储或传输的形式的过程。 在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。 [b]目的 [/b] 1、以某种存储形式使自定义对象持久化; 2、将对象从一个地方传递到另一个地方。 3、使程序更具维护性。 当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。 把Java对象转换为字节序列的过程称为对象的序列化,又叫串行化 把字节序列恢复为Java对象的过程称为对象的反序列化,又叫并行化 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 2) 在网络上传送对象的字节序列。 [b]关系[/b] 对象序列化机制对于需要将对象的状态保存到文件中,而后能够通过读入对象状态来重新构造对象,恢复程序状态,对象序列化的过程是对象持久化的方法之一,把对象保存到文件中。 序列化是为了解决对象的传输问题,传输可以在线程之间、进程之间、内存外存之间、 主机之间进行。 持久化往往依赖于数据库,是为了长期存储的。序列化是为了散集和列集做短期存储和数据传递的。 如果按照存储介质和生命周期的长短划分,所有的数据都以两种形式存在,其中一种是保存于内存中的运行时对象,另一种则是存储于持久化物理介质中的文件,比如数据库文件等。数据的持久化关注于相同的数据在不同形态数据之间的转化,解决的是如何将内存对象持久化存储,以及从物理介质中加载数据并创建内存对象。 数据的持久化是序列化的又一个典型的应用,对象只有在序列化之后才能进行持久化存储,从持久化存储介质加载的数据通过反序列化转变成运行时对象。 [b]Lua序列化实例[/b]
[u]复制代码[/u] 代码如下:
local str_serialize = ""   local function serialize (o)      str_serialize = str_serialize or ""      if o == nil then          io.write("nil")          str_serialize = str_serialize.."nil"          return      end      if type(o) == "number" then          io.write(o)          str_serialize = str_serialize..o      elseif type(o) == "string" then          io.write(string.format("%q", o))          str_serialize = str_serialize..string.format("%q", o)      elseif type(o) == "table" then          io.write("{\n")          str_serialize = str_serialize.."{\n"          for k,v in pairs(o) do              io.write(" [");              str_serialize = str_serialize.." ["              serialize(k);              io.write("] = ")              str_serialize = str_serialize.."] = "              serialize(v)              io.write(",\n")              str_serialize = str_serialize..",\n"          end          io.write("}")          str_serialize = str_serialize.."}"      elseif type(o) == "boolean" then          io.write( o and "true" or "false" )          str_serialize = str_serialize..(o and "true" or "false")      elseif type(o) == "function" then          io.write( "function" )          str_serialize = str_serialize.."function"      else          error("cannot serialize a " .. type(o))      end      return  end  local ddd = {a = 12,b = "Lua",key = "another \"one\"",d = false}  serialize(ddd)  print("")  print(str_serialize) 
结果:
[u]复制代码[/u] 代码如下:
{  ["a"] = 12,  ["d"] = false,  ["key"] = "another \"one\"",  ["b"] = "Lua", } {  ["a"] = 12,  ["d"] = false,  ["key"] = "another \"one\"",  ["b"] = "Lua", }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部