c-压缩实用程序使用的LZW算法的POSIX系统库是什么



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

我正在寻找类Unix系统中compress命令行工具使用的自适应Lempel-Ziv算法。我正在寻找HTTP所说的在接收Content-Encoding: compress标头时应该使用的算法。这是您在POSIX shell中键入man compress时所描述的算法,在这篇维基百科文章中也有介绍。

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

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

这个算法有标准的C实现/库吗?

我想我已经找到了一些好的参考:

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

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

更新的实现

DOS移植

基于免费BSD的苹果版本。

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

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

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

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

但是,不必必须支持压缩才能兼容http。压缩方法是一种协商,您可以不说您接受压缩(如果您是客户端),也可以在客户端接受压缩时不提供压缩(如果你是服务器)。并不是说"每个服务器都应该支持"压缩编码。

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

最新更新