15

我正在使用 gzcompress(json_encode($arr),9) 压缩数组。所以我用 json_encode 将数组转换为字符串,然后用 gzcompress 压缩。但我找不到结果字符串的大小有太大差异。压缩前大小为 488 KB,压缩后大小为 442 KB。

有什么办法可以进一步压缩字符串吗?

提前致谢。

4

2 回答 2

24

我不确定您的数字是否正确,但您可以使用gzdeflate而不是gzcompressasgzcompress在输出中添加 6 个字节(开头有 2 个额外字节,结尾有 4 个额外字节)。

一个简单的测试显示一个长度为 1756800 的字符串通过双重压缩压缩为 99 个字节,如果压缩一次则为 5164 个字节。

$string = str_repeat('1234567890' . implode('', range('a', 'z')), 48800);

echo strlen($string); //1756800 bytes

$compressed = gzdeflate($string,  9);
$compressed = gzdeflate($compressed, 9);

echo strlen($compressed); //99 bytes

echo gzinflate(gzinflate($compressed));
于 2012-06-12T06:08:06.363 回答
18

字符串的压缩程度取决于您要压缩的数据。如果它主要由随机数据组成,那么您将不会在大小上取得那么大的改进。有许多算法是为特定用途而设计的。

您应该尝试确定要压缩的数据主要包含哪些内容,然后选择适当的压缩方式。

刚才我只能给你推荐 bzcompress,bzip 的压缩率通常比 gzip 高。

于 2012-06-12T05:44:20.240 回答