Lua 模块 Lzo

lua-users home
wiki

Lzo 是一个 Lua 模块,用于通过 [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 包含一个使用 adler32 算法计算校验和的函数。在模块的最新版本中,我也对该函数进行了接口,因此您可以从 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 (差异)