字符串表编码与 gzip 压缩

Posted

技术标签:

【中文标题】字符串表编码与 gzip 压缩【英文标题】:String table encoding vs. gzip compression 【发布时间】:2009-09-12 16:54:31 【问题描述】:

在我的应用程序中,我需要存储和传输包含许多重复字符串值的数据(想想 XML 文档中的实体名称)。我有两个建议的解决方案:

A) 创建一个字符串表存储在文档中,然后在文档正文中使用索引引用(使用多字节编码),或者 B) 只需使用 gzip 或类似的压缩算法压缩文档。

在速度和数据大小方面,哪一个可能会表现得更好? (显然,这取决于实现的质量,但假设选项 A 动态构建字符串数组并以某种合理的方式对文档正文进行编码)。

另外,如果是选项 B,您是否推荐一种比 gzip 更合适的压缩方法?

【问题讨论】:

【参考方案1】:

简单地使用 gzip 肯定是最简单的,而且可能就足够了。我建议尝试使用字符串表,然后对其进行 gzip 压缩,看看是否比单独使用 gzip 获得更好的压缩。

【讨论】:

【参考方案2】:

gzip 只有在传输/存储成本与 CPU 时间成本相比不太高的情况下才是一个好的算法。您可以使用 bzip2、7zip 获得更好的压缩率,尤其是自然语言,各种PPM 算法。

当然,重要的不仅仅是计算(以及静态与动态内存要求)与压缩比 - 不同的压缩格式允许不同程度的有效随机访问搜索、低延迟流解码和压缩数据的串联(例如cat a.gz b.gz | gunzip -cgunzip -c a.gz;gunzip -c b.gz 相同

【讨论】:

【参考方案3】:

这将取决于您的帖子中未提及的许多事情。

为什么不先尝试一下 zip 方法,因为它很容易实现。然后,如果它满足您的速度/压缩要求,您就完成了,可以继续下一个功能。

【讨论】:

以上是关于字符串表编码与 gzip 压缩的主要内容,如果未能解决你的问题,请参考以下文章

Java利用Gzip对字符串进行压缩与解压

Linux 压缩与解压缩工具gzip/gunzip

Python解析二进制字节流为字符串(GZIP)

Python解析二进制字节流为字符串(GZIP)

Flutter Gzip 编码与解码 Dart Gzip 工具类操作

GZIP压缩和解压