Моя программа обрабатывает PDF-файлы и считывает из них несколько потоков.Там также есть потоки, закодированные в FlateEncoded.Я использую метод "inflate ()" zlib для их распаковки.
Обычно это работает очень хорошо со следующим кодом:
static string FlateDecode(string s){
int factor = 50;
z_stream stream;
while(true){
char * out = new char[s.length()*factor];
stream.zalloc = Z_NULL;
stream.zfree = Z_NULL;
stream.opaque = Z_NULL;
stream.avail_in = s.length();
stream.next_in = (Bytef*)s.c_str();
stream.avail_out = s.length()*factor;
stream.next_out = (Bytef*)out;
inflateInit(&stream);
inflate(&stream, Z_FINISH);
inflateEnd(&stream);
if(stream.total_out >= factor*s.length()){
delete[] out;
factor *= 2;
continue;
}
string result;
for(unsigned long i = 0; i < stream.total_out; i++){
result += out[i];
}
delete[] out;
return result;
}
}
Но у inflate есть пустой результат для некоторых потоков.Это не часто, но так бывает.У кого-нибудь есть идея, почему?
Потоки должны быть в порядке, потому что все читатели PDF правильно читают файлы PDF.
Спасибо за помощь!
ОБНОВЛЕНИЕ
Я загрузил PDF и поток, чтобы вы могли проверить его самостоятельно.
PDF -> Поток начинается с байта 43296
Поток
ОБНОВЛЕНИЕ 2
Я сравнил потоки, которые не могут быть распакованы, с потоками, которые можно распаковать.Я заметил интересную вещь: все рабочие потоки начинаются с 2 байтов H%.Проблемные потоки начинаются с ö>.Кто-нибудь сейчас что это значит?
Спасибо за любую помощь!