Сжатие без потерь

В этом разделе представлены функции, которые сжимают и разжимают данные без потерь. У меня были исходники на С популярного когда-то архиватора LZH ( Haruyasu Yoshizaki 20.11.1988 ) и менее известного архиватора HA ( Harri Hirvola 1995 ). Я решил сделать из них объектные версии на С++ для того, чтобы они могли работь не только с файлами, но и с другими видами данных. В результате получились следующие функции:

void lzh_pack   ( class IReadSeekFile & infile, class WriteFile & outfile );
void lzh_unpack ( class IReadFile     & infile, class WriteFile & outfile );

void asc_pack   ( class IReadFile & infile, class WriteFile & outfile );
void asc_unpack ( class IReadFile & infile, class WriteFile & outfile );

Описание классов IReadSeekFile, IReadFile и IWriteFile находится здесь. В архиваторе HA используется два алгоритма сжатия: более быстрый ASC и медленный HSC, который во многих случаях, но не всегда, даёт более сильное сжатие, чем ASC. Я переписал на С++ только ASC. Если же сравнивать LZH и ASC, то LZH работает быстрее, а ASC лучше сжимает. LZH использует кодирование Хафмана, а ASC - арифметическое кодирование, которое лучше сжимает, но забирает большую часть времени.

Исходники находятся в press.zip. Вы можете сравнить их с оригиналами ( lzh.zip, ha.zip ).

Наверх