Похоже, ваша библиотека обрабатывает только данные в памяти, основанные на том, что вы опубликовали. Это может быть в состоянии делать данные на основе файлов, но это совсем не ясно из того, что вы предоставили.
Следовательно, вам, вероятно, потребуется сделать следующее:
- чтение файла в буфер в памяти;
- выделить другую (сжатую) область буфера, на 1% больше с дополнительными 320 байтами;
- вызов функции для преобразования обычного буфера памяти в сжатый буфер;
- записать сжатый буфер в другой файл (количество для записи зависит от
outsize
, возвращаемого функцией).
Если вы хотите иметь возможность обрабатывать входные файлы произвольного размера, не беспокоясь о возможности нехватки памяти для буферов, вы можете «разделить» входные данные на (например) 64 569-байтовые куски.
Для этого потребуется входной буфер объемом 64 569 байт, выходной буфер размером 65 535 байт (64 569 * 1,01 + 320, округленный в большую сторону) и способ хранения этих блоков, чтобы вы могли получить их отдельно для декомпрессии.
Например, вам может потребоваться записать 16-разрядный без знака outsize
(теперь вы понимаете, почему я выбрал размер ввода 64 569, чтобы ограничить outsize
16-разрядным значением), за которым следует такое количество байтов данных для каждого отдельного куска.
Сжатие, вероятно, будет немного меньше, поскольку вы периодически перезапускаете дерево Хаффмана, но оно все равно должно быть разумно близко к тому, что вы получили бы, если бы делали весь файл сразу.