Lua Lzo 模組

lua-users home
Wiki

Lzo 是 Lua 的模組,針對透過 library [miniLZO] 進行資料的簡單壓縮及解壓縮。

說明

此模組主要目標為:

快速提示

此模組非常容易使用,僅兩個函式。

lzo.compress(str)
lzo.decompress(str)

兩個函式都以 Lua 字串為單一參數,並傳回另一個 Lua 字串。傳遞至 lzo.decompress 的字串必須採用特別格式,就像是由 lzo.compress 所產生的,否則 lzo.decompress 會產生錯誤。

範例

以下是一個快速範例,用於開啟檔案,並將其壓縮至另一個檔案。

input = io.open("inputfile", "rb")
output = io.open("outputfile", "wb")

in_data = input:read("*a")
input:close()

out_data= lzo.compress(in_data)

output:write(out_data)
output:close()

print(string.len(in_data) .. " bytes compressed to " ..
      string.len(out_data).. " bytes")

-- Let the GC thrash away buffers
in_data = nil
out_data= nil

其他

miniLZO 內含一個函式,用於使用編碼後壓縮碼 32 演算法運算檢查碼。在新的模組版本中,我已為此函式進行介面處理,因此您可透過以下方式從 Lua 中呼叫它。

lzo.adler(num)

數字(非必要)為總和的初始值;若沒有給予,預設值為 0

作者

AdrianPerez

下載

目前僅提供原始碼。最新版本為 0.4

您僅需要 Lua 5.0 beta 或更新版本,由於 miniLZO 原始碼內含在套件中。

目前的版本已於 MacOS X 10.2 (Jaguar) 及 Linux 中進行測試。由於 miniLZO 可攜性很高,因此幾乎可以在任何可執行 Lua 的作業系統中進行編譯及執行。

錯誤修正補丁

在 lua 5.0 中編譯此程式碼時發生錯誤。這是修改版的 luaLZO_open()... 改成這樣。

int luaLZO_open(lua_State* L)
{
	ASSERT(L);
	
	if (lzo_init() != LZO_E_OK) {
		luaL_error(L, "failed to initialize the mini-LZO (de)compressor");
	}

	static const luaL_reg lzolib[] = {
	  {"comp", luaLZO_compress},
	  {"decomp", luaLZO_decompress},
	  {"adler", luaLZO_adler},
	  {NULL, NULL}
	};

	luaL_openlib(L, "lzo", lzolib, 0);

	return 0;
}

- redpixel (redpixel_at_korea.com)

感謝,我將在下一版本中處理 - AdrianPerez


最新異動 · 喜好設定
編輯 · 歷程
上次編輯時間為 2009 年 10 月 31 日下午 7:32 GMT (diff)