最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2014年09月27日 15:22:06   投稿:junjie  
這篇文章主要介紹了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ù),都會以二進制序列的形式在網(wǎng)絡上傳送。發(fā)送方需要把這個Java對象轉換為字節(jié)序列,才能在網(wǎng)絡上傳送;接收方則需要把字節(jié)序列再恢復為Java對象。

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

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

1) 把對象的字節(jié)序列永久地保存到硬盤上,通常存放在一個文件中;
2) 在網(wǎng)絡上傳送對象的字節(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",
}

相關文章

  • 舉例說明Lua中元表和元方法的使用

    舉例說明Lua中元表和元方法的使用

    這篇文章主要介紹了舉例說明Lua中元表和元方法的使用,文中--兩個橫線開始單行的注釋,--[[加上兩個[和]表示多行的注釋--]],需要的朋友可以參考下
    2015-07-07
  • Lua中的持久化和序列化詳解

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

    這篇文章主要介紹了Lua中的持久化和序列化詳解,本文詳細講解了Lua中的持久化和序列化,并給出代碼實例,需要的朋友可以參考下
    2014-09-09
  • 深入談談lua中神奇的table

    深入談談lua中神奇的table

    table 在lua中是一個非常常用的數(shù)據(jù)結構,可以用來存放各種類型的元素,下面這篇文章就來給大家介紹了關于lua中神奇的table的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧
    2018-07-07
  • Lua之協(xié)同程序coroutine代碼實例

    Lua之協(xié)同程序coroutine代碼實例

    這篇文章主要介紹了Lua之協(xié)同程序coroutine代碼實例,本文給出的代碼示例較為復雜,需要對Lua協(xié)同程序有一定的了解方能看懂,需要的朋友可以參考下
    2015-04-04
  • Lua中的string庫(字符串函數(shù)庫)總結

    Lua中的string庫(字符串函數(shù)庫)總結

    這篇文章主要介紹了Lua中的string庫(字符串函數(shù)庫)總結,本文講解了string庫的操作方法,著重講解了string.format方法,需要的朋友可以參考下
    2014-11-11
  • Lua變量類型簡明總結

    Lua變量類型簡明總結

    這篇文章主要介紹了Lua變量類型簡明總結,本文總結了Lua中的6種變量類型,并一一說明,需要的朋友可以參考下
    2014-10-10
  • 詳解Lua中的元表和元方法

    詳解Lua中的元表和元方法

    Lua中的元表(Metatable)和元方法(Metamethods)是Lua語言中的重要概念,它們允許我們對對象和操作進行自定義,本文講給大家詳細介紹一下Lua中的元表和元方法,需要的朋友可以參考下
    2023-09-09
  • 獲取Lua表結構(table)數(shù)據(jù)實例

    獲取Lua表結構(table)數(shù)據(jù)實例

    這篇文章主要介紹了獲取Lua表結構(table)數(shù)據(jù)實例,本文使用lua_gettable函數(shù)獲取表結構,需要的朋友可以參考下
    2014-09-09
  • Lua學習筆記之函數(shù)、變長參數(shù)、closure(閉包)、select等

    Lua學習筆記之函數(shù)、變長參數(shù)、closure(閉包)、select等

    這篇文章主要介紹了Lua學習筆記之函數(shù)、變長參數(shù)、closure(閉包)、select等,本文著重講解了這些特性的用法,并給出代碼實例,需要的朋友可以參考下
    2015-04-04
  • Lua教程(十三):弱引用table

    Lua教程(十三):弱引用table

    這篇文章主要介紹了Lua教程(十三):弱引用table,一個table的弱引用類型是通過其元表的__mode字段來決定的,如果該值為包含字符"k",那么table就是key弱引用,如果包含"v",則是value弱引用,如果兩個字符均存在,就是key/value弱引用,需要的朋友可以參考下
    2015-04-04

最新評論

肥西县| 黄梅县| 临海市| 宁陵县| 盱眙县| 抚顺市| 双城市| 兰州市| 汉源县| 惠东县| 沅江市| 读书| 五莲县| 高密市| 行唐县| 屏东市| 疏附县| 罗山县| 东丽区| 石门县| 竹北市| 西宁市| 平乐县| 津南区| 克东县| 工布江达县| 隆尧县| 交城县| 正定县| 邮箱| 望城县| 昭通市| 芷江| 龙胜| 蓝田县| 平利县| 陕西省| 德令哈市| 宁夏| 嘉善县| 灵宝市|