BZ2_bzBuffToBuffCompress C++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by fire64, 2 Oct 2011.

  1. fire64

    fire64 Elder - Старейшина

    Joined:
    1 Apr 2008
    Messages:
    251
    Likes Received:
    22
    Reputations:
    5
    Столкнулся со странной проблемой BZ2 имеет отрицательный КПД, тоесть сжатые файлы весят больше чем обычные.

    PHP:
    bool CommpressBuffchar *destbuffunsigned int *destbufflenchar *sourcebuffint sourcebufflen )
    {
        
    int res BZ2_bzBuffToBuffCompressdestbuffdestbufflensourcebuffsourcebufflen9030 );

        if(
    res)
        {
            
    LogPrintf"Error compressing buff: %d\n"res );
            return 
    false;
        }

        return 
    true;
    }


        
    filedata_t pFilebuff FileReadpFileName );

        if(!
    pFilebuff.filelen)
        {
            
    LogPrintf"Error: can't open file: %s\n"pFileName );
            return 
    0;
        }

        
    char *pCompresBuff = (char *)malloc(pFilebuff.filelen 2);
        
    unsigned int comprbufflen pFilebuff.filelen 2;

        
    CommpressBuffpCompresBuff, &comprbufflenpFilebuff.filebufpFilebuff.filelen );

        
    LogPrintf"File %s successfully compression: %d -> %d\n"pFileNamepFilebuff.filelencomprbufflen );

    Пример:
    File test.jpg successfully compression: 126225 -> 126259


    В чем причина?
     
    #1 fire64, 2 Oct 2011
    Last edited: 2 Oct 2011
  2. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Попробуй сжимать файлы с низкой энтропией, например, текстовики, бинарники, документы. Картинки практически несжимаемы.
     
  3. fire64

    fire64 Elder - Старейшина

    Joined:
    1 Apr 2008
    Messages:
    251
    Likes Received:
    22
    Reputations:
    5
    GRRRL Power, только что попробовал сжать frenzy.bsp

    Результат:
    File frenzy.bsp successfully compression: 662356 -> 252636

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