Размер буфера декомпрессии LZO - PullRequest
2 голосов
/ 21 апреля 2009

Я использую MiniLZO в проекте для некоторых очень простых задач сжатия. Я сжимаю с одной программой, и сжимаю с другой. Я хотел бы знать, сколько места выделено для буфера распаковки. Я в порядке с перераспределением пространства, если это может избавить меня от необходимости аннотировать мой выходной файл целым числом, указывающим, сколько места должны занимать распакованные данные. Как бы я выяснил, сколько места это может занять?

После некоторого рассмотрения я думаю, что этот вопрос сводится к следующему: Какая максимальная степень сжатия lzo1x сжатия?

Ответы [ 2 ]

4 голосов
/ 21 апреля 2009

Поскольку вы управляете как компрессором, так и декомпрессором, я предлагаю вам сжать входные данные в блоках фиксированного размера. В моем приложении я сжимаю до 64 КБ в каждом блоке, затем выдаю размер сжатого блока и самих сжатых данных, поэтому сжатый поток фактически выглядит как серия сжатых блоков:

length_of_block_1
block_1
length_of_block_2
block_2
...

Декомпрессор просто читает каждый сжатый блок и распаковывает его в буфер размером 64 КБ, так как я знаю, что блок был создан путем сжатия блока размером 64 КБ.

Надеюсь, это поможет,

Эрик Мелски

2 голосов
/ 21 апреля 2009

Максимальный размер распакованных данных явно совпадает с максимальным размером данных, которые вы сначала сжимали.

Если есть верхняя граница для вашего входного размера, то я думаю, что вы можете использовать его, но я должен сказать, что обычный способ сделать это - добавить заголовок в ваш сжатый буфер, который определяет размер без сжатия.

...