激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Lua - Lua中的持久化和序列化詳解

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

2020-04-12 13:44junjie Lua

這篇文章主要介紹了Lua中的持久化和序列化詳解,本文詳細講解了Lua中的持久化和序列化,并給出代碼實例,需要的朋友可以參考下

持久化

持久化(Persistence),即把內存中的對象保存到可永久保存的存儲設備中。持久化的主要應用是將內存中的對象存儲在關系型的數(shù)據(jù)庫中,當然也可以存儲在磁盤文件中、XML數(shù)據(jù)文件中等等。

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

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

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

序列化

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

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

目的

1、以某種存儲形式使自定義對象持久化;
2、將對象從一個地方傳遞到另一個地方。
3、使程序更具維護性。

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

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

對象的序列化主要有兩種用途:

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

關系

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

序列化是為了解決對象的傳輸問題,傳輸可以在線程之間、進程之間、內存外存之間、 主機之間進行。

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

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

數(shù)據(jù)的持久化是序列化的又一個典型的應用,對象只有在序列化之后才能進行持久化存儲,從持久化存儲介質加載的數(shù)據(jù)通過反序列化轉變成運行時對象。

Lua序列化實例

 

復制代碼 代碼如下:

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) 

 

結果:

 

復制代碼 代碼如下:

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

延伸 · 閱讀

精彩推薦
  • LuaLua實現(xiàn)__add方法重載示例

    Lua實現(xiàn)__add方法重載示例

    這篇文章主要介紹了Lua實現(xiàn)__add方法重載示例,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下 ...

    腳本之家7452020-04-24
  • LuaLua教程(二):基礎知識、類型與值介紹

    Lua教程(二):基礎知識、類型與值介紹

    這篇文章主要介紹了Lua教程(二):基礎知識、類型與值介紹,本文講解了Hello World程序、代碼規(guī)范、全局變量、類型與值等內容,需要的朋友可以參考下 ...

    腳本之家5922020-04-28
  • LuaLua中table庫函數(shù)方法介紹

    Lua中table庫函數(shù)方法介紹

    這篇文章主要介紹了Lua中table庫函數(shù)方法介紹,本文講解了concat、insert、maxn、remove、sort、foreachi等方法,需要的朋友可以參考下 ...

    腳本之家2502020-04-17
  • LuaLua簡介、編譯安裝教程及變量等語法介紹

    Lua簡介、編譯安裝教程及變量等語法介紹

    這篇文章主要介紹了Lua簡介、編譯安裝教程及變量等語法介紹,本文同時講解了lua注釋語法、Lua命令行方式等內容,需要的朋友可以參考下 ...

    junjie3632020-04-14
  • Lua深入探究Lua中的解析表達式

    深入探究Lua中的解析表達式

    這篇文章主要介紹了深入探究Lua中的解析表達式,對于其語法部分的說明和示例都超詳細,極力推薦此文!需要的朋友可以參考下 ...

    腳本之家3542020-05-05
  • LuaLua中的元方法__newindex詳解

    Lua中的元方法__newindex詳解

    這篇文章主要介紹了Lua中的元方法__newindex詳解,本文講解了查詢與更新、監(jiān)控賦值、通過table給另一個table賦值等內容,需要的朋友可以參考下 ...

    笨木頭8872020-04-09
  • LuaLua和C語言的交互詳解

    Lua和C語言的交互詳解

    這篇文章主要介紹了Lua和C語言的交互詳解,Lua和C語言通過棧完成交互,本文結合代碼實例詳細講解了交互的方法,需要的朋友可以參考下 ...

    果凍想3702020-04-14
  • LuaLua中計算、執(zhí)行字符串中Lua代碼的方法

    Lua中計算、執(zhí)行字符串中Lua代碼的方法

    這篇文章主要介紹了Lua中計算、執(zhí)行字符串中Lua代碼的方法,類似JavaScript中eval函數(shù)的功能,在Lua中也可以實現(xiàn),需要的朋友可以參考下 ...

    腳本之家6322020-04-30
主站蜘蛛池模板: 欧美成a人片在线观看久 | 国产高潮国产高潮久久久91 | 看免费毛片 | 91短视频在线观看免费最新 | 欧美精品一级片 | 久久国产乱子伦精品 | 国产三级午夜理伦三级 | 国产一级毛片视频在线! | 久久毛片 | 一级大片视频 | 亚洲国产色婷婷 | 色婷婷综合久色aⅴ | 特黄一级小说 | 五月天影院,久久综合, | 精品国产一区二区三区在线观看 | 极品国产91在线网站 | xnxx 日本19 | 成人在线视频免费观看 | 国产免费高清 | 成人午夜视频免费 | 色污视频在线观看 | 成人做爽爽爽爽免费国产软件 | 精品国产一区二区三 | 91看片成人 | 日韩视频在线视频 | 亚洲一区二区三区视频免费 | 久久久久久久久久亚洲 | 一区二区三区日韩 | 在线观看国产 | 国产91小视频在线观看 | 日日草夜夜草 | 广州毛片 | 一级成人欧美一区在线观看 | 日本在线免费观看 | 黄色一级片毛片 | h网站在线观看 | 亚洲精品在线观看网站 | 色综av| 男女亲热网站 | 久久视讯 | 久久久经典视频 |