0

我正在尝试在 iPhone 应用程序中使用 zlib 将文本文件压缩为 gzip 文件作为测试。我正在使用以下代码

const char *s = [[Path stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@".%@", [Path pathExtension]] withString:@".gz"] UTF8String];
gzFile *fi = (gzFile *)gzopen(s, "wb");
const char *c = readFile(Path.UTF8String);
gzwrite(fi, c, strlen(c));
gzclose(fi);

wherereadFile()返回使用函数const char*从文件中获取的a。fgets()问题是,当我使用它来压缩文件时,它不会压缩它,而是 gzip 文件比原始文件大。例如,我有一个 90 字节的文本文件,使用此方法后 gzip 的大小为 98 字节。为什么 gzip 不小于原始文件?

4

3 回答 3

7

GZip 格式包括固定大小的标头信息。因为您压缩的数据太少,所以标头信息大于您节省的空间。

90 字节一般不值得压缩。

http://www.gzip.org/zlib/rfc-gzip.html#header-trailer

于 2013-03-24T03:00:03.523 回答
2

无论使用何种压缩算法,生成的数据总是有可能大于输入,否则将无法对输入位模式的任何组合进行编码。

正如在您的特殊情况中所述,与标头开销相比,文件大小非常小似乎是问题所在。

尽管如此,请记住,永远不能保证“压缩”文件的大小会更小。

于 2013-03-24T03:07:24.413 回答
1
  1. 您尝试压缩的数据太小,没有太多冗余,因此没有什么可压缩的。简单地说,压缩算法通过消除数据中的重复序列来起作用。在 90 个字节中,您可能没有太多冗余,除非它是像"aaaaaaa....".
  2. 如前所述,固定标头开销。

尝试更大的数据文件。

于 2013-03-24T03:01:50.727 回答