GZIP-упаковка/распаковка в пам’яті

Для виконання операцій упаковки / розпаковування даних прямо в пам’яті, можна використовувати безкоштовну бібліотеку zlib (формат одержуваних даних сумісний з gzip).


Нижче приведений вихідний текст, який демонструє, як це можна зробити.

#include “stdafx.h”
#include “stdio.h”

/ / Підключаємо zlib у вигляді dll
#define zlib_dll 1
#include “gziphelper.h”
#pragma comment(lib, “gzipzlib.lib”)

//////////////////////////////////////////////////////////////////////////

/ / Функція для упаковки буфера
template
t *zlib_compress(t *buf, dword size, dword *result_size=null)
{
ca2gzipt<65536, z_best_compression, z_default_strategy> gzip((char *)buf, size);
if(result_size)
*result_size = gzip.length;
return (t*)gzip.pgzip;
}

/ / Функція для розпакування буфера,
template
t *zlib_uncompress(t *buf, dword size, dword *result_size=null)
{
cgzip2a plain((byte*)buf, size);
if(result_size)
*result_size = plain.length;
return plain.psz;
}

//////////////////////////////////////////////////////////////////////////

int main(int argc, char* argv[])
{
/ / Відкриваємо тестовий файл, визначаємо його розмір
file *f = fopen(“test.txt”, “r”);
if(!f) return 1;
fseek(f, 0, seek_end);
dword size = ftell(f);
fseek(f, 0, seek_set);

/ / Виділяємо область пам’яті для тексту з файлу, читаємо файл
char *text = new char[size ];
fread(text, size, 1, f);
fclose(f);

/ / Упаковуємо текст gzip-ом
dword comp_size;
char *compressed = zlib_compress(text, size, &comp_size);

/ / Розпаковуємо
dword uncomp_size;
char *uncompressed = zlib_uncompress(compressed, comp_size, &uncomp_size);

/ / Виводимо результати … Вражає!
printf(“source string: %d bytes
“, size);
printf(“packed string: %d bytes
“, comp_size);
printf(“unpacked string: %d bytes
“, uncomp_size);

/ / Насолоджуємося результатом smile.gif …
while(1);

return 0;

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*