Seite 1 von 1

QHttp gzip,deflate im Qbuffer decomprimieren problem

Verfasst: 17. August 2007 02:17
von patrik08
Ich sende im QHttp header so dass mein client gzip stream oeffnen kann das es auch schneller geht beim laden....

header.setValue("Accept-Encoding", "gzip,deflate");

nun frage gibt es eine moeglichkeit den empfangene QByteArray zu decoprimieren ohne file so im buffer?


zur zeit oeffne ich ein file dekomprimiere lese und loesche ich das file... aber geht es auch anders....

Code: Alles auswählen


void  GetHttp::DecompressStream()
{
    /*  QByteArray byteArray;   incomming data */
    
    QChar letter('A' + (qrand() % 26));
    const QString tmpfiler = QString("%1http_%2.gz").arg(WORK_CACHEDIR).arg(letter);
    
    QFile f( tmpfiler );
      if ( f.open( QIODevice::WriteOnly ) ) {
        f.write(byteArray);
        f.close();
      } else {
      std::cout << "### Unable to work on cache dir!. "  << std::endl;
      return;
      }
      
     gzFile file;
      file = gzopen (tmpfiler.toUtf8().data(),"rb");
      if(!file) {
        std::cout << "### Unable to work on cache dir!. "  << std::endl;
        return;
      }
      QByteArray input;
      char buffer[1024];
      QByteArray inputData;
      while(int readBytes =  gzread (file, buffer, 1024))
       {
        input.append(QByteArray(buffer, readBytes));
      }
      gzclose(file);
      f.remove();
      
      byteArray.clear();
      byteArray.append(input);
}



 if (Compressed) {
                 if (zipmode == GZIP_MODE ||  zipmode == DEFLATE_MODE ) {
                 DecompressStream();
                 } else if (zipmode == QT_MODE) {
                     QByteArray input =  qUncompress(byteArray); 
                     byteArray.clear();
                     byteArray.append(input);
                 }
    } else { 
.....



Verfasst: 17. August 2007 13:43
von caligano
Statt QFile kannst du doch auch QBufferbenutzen, das wäre für diesen Zweck wohl die geeignetere Klasse.