欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2014年09月27日 15:22:06   投稿:junjie  
這篇文章主要介紹了Lua中的持久化和序列化詳解,本文詳細(xì)講解了Lua中的持久化和序列化,并給出代碼實(shí)例,需要的朋友可以參考下

持久化

持久化(Persistence),即把內(nèi)存中的對(duì)象保存到可永久保存的存儲(chǔ)設(shè)備中。持久化的主要應(yīng)用是將內(nèi)存中的對(duì)象存儲(chǔ)在關(guān)系型的數(shù)據(jù)庫中,當(dāng)然也可以存儲(chǔ)在磁盤文件中、XML數(shù)據(jù)文件中等等。

持久化是將程序數(shù)據(jù)在持久狀態(tài)和瞬時(shí)狀態(tài)間轉(zhuǎn)換的機(jī)制。(應(yīng)用與游戲,)
JDBC就是一種持久化機(jī)制。文件IO也是一種持久化機(jī)制。

為什么需要持久化服務(wù)呢?那是由于內(nèi)存本身的缺陷引起的:內(nèi)存掉電后數(shù)據(jù)會(huì)丟失,但有一些對(duì)象是無論如何都不能丟失的,比如銀行賬號(hào),遺憾的是,人們還無法保證內(nèi)存永不掉電。

持久化方案可以分為關(guān)系數(shù)據(jù)庫方案、文件方案、對(duì)象數(shù)據(jù)庫方案、 xml數(shù)據(jù)庫方案,目前主流的持久化方案是關(guān)系數(shù)據(jù)庫方案,關(guān)系數(shù)據(jù)庫方案不僅解決了并發(fā)的問題,更重要的是,關(guān)系數(shù)據(jù)庫還提供了持久化服務(wù)之外的價(jià)值:統(tǒng)計(jì)分析功能。

序列化

將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)男问降倪^程。

在序列化期間,對(duì)象將其當(dāng)前狀態(tài)寫入到臨時(shí)或持久性存儲(chǔ)區(qū)。以后,可以通過從存儲(chǔ)區(qū)中讀取或反序列化對(duì)象的狀態(tài),重新創(chuàng)建該對(duì)象。

目的

1、以某種存儲(chǔ)形式使自定義對(duì)象持久化;
2、將對(duì)象從一個(gè)地方傳遞到另一個(gè)地方。
3、使程序更具維護(hù)性。

當(dāng)兩個(gè)進(jìn)程在進(jìn)行遠(yuǎn)程通信時(shí),彼此可以發(fā)送各種類型的數(shù)據(jù)。無論是何種類型的數(shù)據(jù),都會(huì)以二進(jìn)制序列的形式在網(wǎng)絡(luò)上傳送。發(fā)送方需要把這個(gè)Java對(duì)象轉(zhuǎn)換為字節(jié)序列,才能在網(wǎng)絡(luò)上傳送;接收方則需要把字節(jié)序列再恢復(fù)為Java對(duì)象。

把Java對(duì)象轉(zhuǎn)換為字節(jié)序列的過程稱為對(duì)象的序列化,又叫串行化
把字節(jié)序列恢復(fù)為Java對(duì)象的過程稱為對(duì)象的反序列化,又叫并行化

對(duì)象的序列化主要有兩種用途:

1) 把對(duì)象的字節(jié)序列永久地保存到硬盤上,通常存放在一個(gè)文件中;
2) 在網(wǎng)絡(luò)上傳送對(duì)象的字節(jié)序列。

關(guān)系

對(duì)象序列化機(jī)制對(duì)于需要將對(duì)象的狀態(tài)保存到文件中,而后能夠通過讀入對(duì)象狀態(tài)來重新構(gòu)造對(duì)象,恢復(fù)程序狀態(tài),對(duì)象序列化的過程是對(duì)象持久化的方法之一,把對(duì)象保存到文件中。

序列化是為了解決對(duì)象的傳輸問題,傳輸可以在線程之間、進(jìn)程之間、內(nèi)存外存之間、 主機(jī)之間進(jìn)行。

持久化往往依賴于數(shù)據(jù)庫,是為了長期存儲(chǔ)的。序列化是為了散集和列集做短期存儲(chǔ)和數(shù)據(jù)傳遞的。

如果按照存儲(chǔ)介質(zhì)和生命周期的長短劃分,所有的數(shù)據(jù)都以兩種形式存在,其中一種是保存于內(nèi)存中的運(yùn)行時(shí)對(duì)象,另一種則是存儲(chǔ)于持久化物理介質(zhì)中的文件,比如數(shù)據(jù)庫文件等。數(shù)據(jù)的持久化關(guān)注于相同的數(shù)據(jù)在不同形態(tài)數(shù)據(jù)之間的轉(zhuǎn)化,解決的是如何將內(nèi)存對(duì)象持久化存儲(chǔ),以及從物理介質(zhì)中加載數(shù)據(jù)并創(chuàng)建內(nèi)存對(duì)象。

數(shù)據(jù)的持久化是序列化的又一個(gè)典型的應(yīng)用,對(duì)象只有在序列化之后才能進(jìn)行持久化存儲(chǔ),從持久化存儲(chǔ)介質(zhì)加載的數(shù)據(jù)通過反序列化轉(zhuǎn)變成運(yùn)行時(shí)對(duì)象。

Lua序列化實(shí)例

復(fù)制代碼 代碼如下:

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) 

結(jié)果:

復(fù)制代碼 代碼如下:

{
 ["a"] = 12,
 ["d"] = false,
 ["key"] = "another \"one\"",
 ["b"] = "Lua",
}
{
 ["a"] = 12,
 ["d"] = false,
 ["key"] = "another \"one\"",
 ["b"] = "Lua",
}

相關(guān)文章

  • lua腳本語言快速入門教程

    lua腳本語言快速入門教程

    這篇文章主要介紹了lua腳本語言快速入門教程,本文講解了變量及常量、字符串、邏輯控制語句、循環(huán)結(jié)構(gòu)、函數(shù)及其使用等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • Lua的函數(shù)環(huán)境、包實(shí)例講解

    Lua的函數(shù)環(huán)境、包實(shí)例講解

    這篇文章主要介紹了Lua的函數(shù)環(huán)境、包實(shí)例講解,本文分別對(duì)函數(shù)環(huán)境、包的定義、實(shí)現(xiàn)方式、使用方式做了分解,需要的朋友可以參考下
    2014-09-09
  • Lua中的metatable介紹

    Lua中的metatable介紹

    這篇文章主要介紹了Lua中的metatable介紹,Lua 中的每個(gè)值都可以用一個(gè) metatable,個(gè) metatable 就是一個(gè)原始的 Lua table,它用來定義原始值在特定操作下的行為,要的朋友可以參考下
    2015-04-04
  • Lua中執(zhí)行系統(tǒng)命令方法介紹

    Lua中執(zhí)行系統(tǒng)命令方法介紹

    這篇文章主要介紹了Lua中執(zhí)行系統(tǒng)命令方法介紹,Lua中有兩種方法可以執(zhí)行操作系統(tǒng)內(nèi)置命令,需要的朋友可以參考下
    2015-04-04
  • Lua編程示例(六): C語言調(diào)用Lua函數(shù)

    Lua編程示例(六): C語言調(diào)用Lua函數(shù)

    這篇文章主要介紹了Lua編程示例(六): C語言調(diào)用Lua函數(shù),本文直接給出代碼實(shí)例,需要的朋友可以參考下
    2015-07-07
  • Lua教程(二):C++和Lua相互傳遞數(shù)據(jù)示例

    Lua教程(二):C++和Lua相互傳遞數(shù)據(jù)示例

    這篇文章主要介紹了Lua教程(二):C++和Lua相互傳遞數(shù)據(jù)示例,本文主要講解了基本數(shù)據(jù)類型的傳遞,比如整形(int)、字符串(string)、數(shù)字(number)及bool值,需要的朋友可以參考下
    2014-09-09
  • Lua判斷數(shù)據(jù)類型的方法

    Lua判斷數(shù)據(jù)類型的方法

    這篇文章主要介紹了Lua判斷數(shù)據(jù)類型的方法,本文講解了判斷數(shù)據(jù)類型的方法和Lua腳本語言的8種基本數(shù)據(jù)類型,需要的朋友可以參考下
    2015-04-04
  • Lua中的元表與元方法學(xué)習(xí)總結(jié)

    Lua中的元表與元方法學(xué)習(xí)總結(jié)

    這篇文章主要介紹了Lua中的元表與元方法學(xué)習(xí)總結(jié),本文講解了算術(shù)類的元方法、__tostring元方法等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • Lua獲取utf8字符串長度和字符串截取并用...代替

    Lua獲取utf8字符串長度和字符串截取并用...代替

    這篇文章主要介紹了Lua獲取utf8字符串長度和字符串截取并用...代替,本文直接給出兩個(gè)函數(shù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-04-04
  • Lua中的函數(shù)代碼實(shí)例

    Lua中的函數(shù)代碼實(shí)例

    這篇文章主要介紹了Lua中的函數(shù)代碼實(shí)例,本文著重講解函數(shù)的寫法以及一些小知識(shí),需要的朋友可以參考下
    2015-04-04

最新評(píng)論