Lua 模块 Lzo |
|
该模块的主要目标是
该模块非常易于使用,只有两个函数
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 包含一个使用 adler32 算法计算校验和的函数。在模块的最新版本中,我也对该函数进行了接口,因此您可以从 Lua 中调用它,方法是
lzo.adler(num)
该数字(可选)是总和的初始值;如果未给出,则使用默认值 0
。
目前它只提供源代码。最新版本为 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