3

这对谷歌来说是一个非常困难的问题。我不是在寻找 gzip 或 Zip 或放气。我想使用的算法称为“压缩”,但这并不意味着我一般都在尝试实现压缩。我正在寻找一个特定的算法。

我正在寻找compress类 Unix 系统中命令行工具使用的自适应 Lempel-Ziv 算法。我正在寻找 HTTP 说您在收到Content-Encoding: compress标头时应该使用的算法。man compress这是您在键入POSIX shell时看到的算法,在此 Wikipedia 文章中

我了解这种压缩算法非常古老,几乎所有实际用途都已被 gzip、Zip、deflate 等取代。但是我正在用 C++ 编写一个服务器作为一个宠物项目,而 IANA 将这个 Unix“压缩”算法指定为每个服务器应该支持的编码之一。

compress实用程序长期以来一直是 Unix shell 的一部分 - 从 POSIX 之前开始 - 我很难相信没有标准的 C 语言实现。我可以使用调用systemexec在 shell 中进行压缩(创建另一个进程……呃),但这比将算法编译到我的可执行文件中效率要低得多。

该算法是否有标准的 C 实现/库?

4

4 回答 4

1

我想我找到了一些很好的参考资料:

首先是基于 Lempel-Ziv 的 Free BSD 压缩实现: https ://www.freebsd.org/security/advisories/FreeBSD-SA-11:04.compress.asc

这里这里是 Lempel-Ziv 算法的修改版本(在作者中,您会发现 Spencer W. Thomas)。

较新的实施

DOS移植

基于免费 BSD 的Apple版本。

提示:搜索引用的“compress.c”。

于 2015-12-19T10:33:30.840 回答
1

当然,在 Linux 中,系统库libarchive支持compress使用的 LZW 。

该库有自己的项目页面,因此在这个意义上是可移植的,尽管它毫无疑问用于其他(如果不是所有的 POSIX 系统)。试试man libarchive吧?

于 2015-12-19T11:02:41.217 回答
1

您可以找到我在此处unlzw()编写的用于解压缩压缩传输的函数。Content-Encoding:

但是,您不必支持compress 以符合 http。压缩方法是一种协商,您可以不说您接受压缩(如果您是客户端),也可以在客户端接受时不提供压缩(如果您是服务器)。“每个服务器都应该支持”压缩编码是不正确的。

于 2015-12-19T14:44:07.063 回答
0

您可以使用lzws库。它没有遗留代码并且与 UNIX 压缩兼容。在 GNU/Linux、OSX、Free BSD 和 Windows (MinGW) 上测试。有红宝石绑定

于 2019-08-07T23:38:11.833 回答