Несоответствие выходных данных zlib raw deflate / inflate - PullRequest
2 голосов
/ 07 декабря 2011

Я использую этот пример: http://zlib.net/zpipe.c почти буквально, с этими несколькими изменениями, потому что я хочу использовать raw deflate:

deflateInit () -> deflateInit2(&strm, 8, Z_DEFLATED, -15,MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY); inflateInit () -> inflateInit2(&strm, -15);

Source и dest это на deflate:

FILE* source = fopen("test.txt", "r+");
FILE* dest = fopen("output", "w+");

И на inflate:

 FILE* src = fopen("output", "r+");
 FILE* dst = fopen("test2.txt", "w+");

Я сжимаю текстовый файл размером 601.7kb, а затем распаковываю егоно около 8kb отсутствуют на завышенном файле.Как это может быть?

Ответы [ 2 ]

1 голос
/ 06 февраля 2012

На какой это платформе?Вам может потребоваться указать двоичный файл в вызовах fopen ().Например, "wb +", "rb +".Отношение потерянных байтов к общему количеству 75 заставляет меня думать, что это средняя длина строки текста, и что преобразование текста с помощью fread () может игнорировать переводы строки.

1 голос
/ 07 декабря 2011

Использование raw с zlib очень удобно с потоками.Я прошел через это глубоко в прошлом месяце.Условия завершения цикла становятся очень странными (EOF в потоке против полной инфляции).zlib (кажется) хочет, чтобы контрольная сумма в конце потока вынуждала последний блок, чего не происходит с развернутыми данными.Если вы дадите раздувать весь блок за один раз (а это то, что мне нужно в любом случае), это будет работать нормально, но я никогда не смогу развернуться, чтобы надежно работать с многоблочной петлей.Это зависит от данных тоже.У меня были некоторые настройки завершения, которые корректно завершались с некоторыми данными, но не с другими.

...