Я выбираю LZMA. Он имеет наименьший байт накладных расходов и имеет сильную степень сжатия. Сравнение между ZIP и LZMA: я создал два файла seq.txt с PHP-кодом
$s = '0123456789'; $str = ''; for ($i=0; $i < 1000000; $i++) $str .= $s[$i%10].($i%10==9 ? "\n":""); file_put_contents('seq.txt', $str);
, который содержит повторяющиеся блоки с 0..9 цифрами ~ 1 Мб данных и rnd.txt с кодом PHP [ ! d1]
$s = '0123456789'; $str = ''; for ($i=0; $i < 1000000; $i++) $str .= $s[rand(0,9)].($i%10==9 ? "\n":""); file_put_contents('rnd.txt', $str);
, который содержит случайные блоки из 0..9 цифр ~ 1 Мб данных.
Результаты сжатия:
seq.txt, rnd.txt - 1100000 байты seq.txt.zip - 2502 байта rnd.txt.zip - 515957 bytes seq.txt.lzma - 257 bytes rnd.txt.lzma - 484939 bytesСтепень сжатия:
seq.txt, rnd.txt - 1100000 байт ZIP -> "rnd.txt" -> 53.094% seq.txt.zip - 2502 байта LZMA -> «rnd.txt» -> 55.914%Таким образом, LZMA сжал последовательные данные на 0,2% эффективнее, чем ZIP и случайные данные на 2.8% эффективнее, чем ZIP.
Конечно, LZMA выигрывает!