Algorytm kompresji używany w zlib jest zasadniczo taki sam jak w gzip i zip . Co to są gzip i zip ? Czym się różnią i jak są tacy sami?
źródło
Algorytm kompresji używany w zlib jest zasadniczo taki sam jak w gzip i zip . Co to są gzip i zip ? Czym się różnią i jak są tacy sami?
Skrócona forma:
.zip
jest formatem archiwalnym używającym zwykle metody kompresji Deflate . .gz
Formacie gzip jest dla pojedynczych plików, a także przy użyciu metody kompresji Deflate. Gzip często stosowany jest w połączeniu ze smołą, aby formacie skompresowanym archiwum , .tar.gz
. Biblioteka zlib zapewnia Deflate kompresji i dekompresji kodu do wykorzystania przez zip, gzip, png (który używa otoki zlib na DEFLATE danych), i wiele innych aplikacji.
Długa forma:
Formacie ZIP został opracowany przez Phil Katz w otwartym formacie z otwartą specyfikacją, gdzie jego wdrożenie, PKZIP został shareware. Jest to format archiwum, w którym przechowywane są pliki i ich struktura katalogów, gdzie każdy plik jest indywidualnie kompresowany. Typ pliku to .zip
. Pliki oraz strukturę katalogów można opcjonalnie zaszyfrować.
Format ZIP obsługuje kilka metod kompresji:
0 - The file is stored (no compression)
1 - The file is Shrunk
2 - The file is Reduced with compression factor 1
3 - The file is Reduced with compression factor 2
4 - The file is Reduced with compression factor 3
5 - The file is Reduced with compression factor 4
6 - The file is Imploded
7 - Reserved for Tokenizing compression algorithm
8 - The file is Deflated
9 - Enhanced Deflating using Deflate64(tm)
10 - PKWARE Data Compression Library Imploding (old IBM TERSE)
11 - Reserved by PKWARE
12 - File is compressed using BZIP2 algorithm
13 - Reserved by PKWARE
14 - LZMA (EFS)
15 - Reserved by PKWARE
16 - Reserved by PKWARE
17 - Reserved by PKWARE
18 - File is compressed using IBM TERSE (new)
19 - IBM LZ77 z Architecture (PFS)
97 - WavPack compressed data
98 - PPMd version I, Rev 1
Metody od 1 do 7 są historyczne i nie są używane. Metody od 9 do 98 są stosunkowo nowymi dodatkami i mają różne, niewielkie zastosowanie. Jedyną metodą, która jest naprawdę szeroko stosowana w formacie ZIP, jest metoda 8, Deflate , oraz w mniejszym stopniu metoda 0, która wcale nie jest kompresją. Praktycznie każdy .zip
plik, na który natrafisz na wolności, będzie używał wyłącznie metod 8 i 0, prawdopodobnie tylko metody 8. (Metoda 8 ma również środki do skutecznego przechowywania danych bez kompresji i względnie niewielkiego rozszerzenia, a metoda 0 nie może być przesyłana strumieniowo podczas gdy metoda 8 może być.)
Standard ISO / IEC 21320-1: 2015 dla kontenerów plików jest ograniczonym formatem zip, takim jak używany w plikach archiwum Java (.jar), plikach Office Open XML (Microsoft Office .docx, .xlsx, .pptx), Office Document Formatuj pliki (.odt, .ods, .odp) i pliki EPUB (.epub). Ten standard ogranicza metody kompresji do 0 i 8, a także inne ograniczenia, takie jak brak szyfrowania lub podpisów.
Około 1990 r. Grupa Info-ZIP napisała przenośne, bezpłatne implementacje zip
i unzip
narzędzia typu open source , obsługujące kompresję w formacie Deflate oraz dekompresję tego i wcześniejszych formatów. To znacznie rozszerzyło użycie tego .zip
formatu.
Na początku lat 90. opracowano format gzip jako zamiennik narzędzia Unixcompress
, pochodzącego z kodu Deflate w narzędziach Info-ZIP. Unix compress
został zaprojektowany do kompresji pojedynczego pliku lub strumienia, dołączając .Z
do nazwy pliku. compress
korzysta z algorytmu kompresji LZW , który w tym czasie był patentowany, a jego swobodne korzystanie było kwestionowane przez posiadaczy patentu. Chociaż niektóre konkretne implementacje Deflate zostały opatentowane przez Phila Katza, format nie był, więc można było napisać implementację Deflate, która nie naruszała żadnych patentów. Wdrożenie nie było tak trudne od ponad 20 lat. Narzędzie Unix gzip
miało być zamiennikiemcompress
, i w rzeczywistości jest w stanie dekompresować compress
skompresowane dane (przy założeniu, że udało Ci się przeanalizować to zdanie). gzip
dołącza a .gz
do nazwy pliku. gzip
używa skompresowanego formatu danych Deflate, który kompresuje się nieco lepiej niż Unix compress
, ma bardzo szybką dekompresję i dodaje CRC-32 jako kontrolę integralności danych. Format nagłówka pozwala również na przechowywanie większej ilości informacji niż compress
dozwolony format, takich jak oryginalna nazwa pliku i czas modyfikacji pliku.
Mimo że compress
kompresuje tylko jeden plik, często używano tego tar
narzędzia do tworzenia archiwum plików, ich atrybutów i struktury katalogów w jednym .tar
pliku, a następnie kompresowania go w compress
celu utworzenia .tar.Z
pliku. W rzeczywistości tar
narzędzie miało i nadal ma opcję wykonania kompresji w tym samym czasie, zamiast konieczności przesyłania danych wyjściowych tar
do compress
. Wszystko to zostało przeniesione do formatu gzip i tar
ma opcję kompresji bezpośrednio do .tar.gz
formatu. tar.gz
Format kompresuje lepiej niż .zip
podejście, ponieważ ściskanie .tar
mogą skorzystać z redundancją w plikach, szczególnie wiele małych plików. .tar.gz
jest najpopularniejszym formatem archiwum używanym w Uniksie ze względu na jego bardzo dużą przenośność, ale istnieją również bardziej efektywne metody kompresji, więc często będziesz widzieć .tar.bz2
i .tar.xz
archiwizujesz.
W przeciwieństwie do tego .tar
, .zip
ma na końcu centralny katalog, który zawiera listę zawartości. To i osobna kompresja zapewnia losowy dostęp do poszczególnych wpisów w .zip
pliku. .tar
Plik musiałby być rozpakowane i skanowane od początku do końca w celu stworzenia katalogu, który jest, jak .tar
plik znajduje się na liście.
Krótko po wprowadzeniu gzip, około połowy lat 90., ten sam spór patentowy zakwestionował swobodne korzystanie z .gif
formatu obrazu, bardzo szeroko stosowanego na tablicach ogłoszeń i w sieci WWW (wówczas coś nowego). Tak więc mała grupa utworzyła bezstratnie skompresowany format obrazu PNG z typem pliku .png
, aby go zastąpić .gif
. Ten format używa również formatu Deflate do kompresji, który jest stosowany po tym, jak filtry danych obrazu ujawniają większą nadmiarowość. Aby promować powszechne stosowanie formatu PNG, utworzono dwie bezpłatne biblioteki kodów. libpng i zlib. libpng obsługiwał wszystkie funkcje formatu PNG, a zlib zapewniał kod kompresji i dekompresji do użytku przez libpng, a także do innych aplikacji. zlib został zaadaptowany z gzip
kodu.
Wszystkie wymienione patenty wygasły.
Biblioteka zlib obsługuje kompresję i dekompresję Deflate oraz trzy rodzaje owijania wokół strumieni deflate. Są to: brak owijania (deflacja „raw”), owijanie zlib , które jest używane w blokach danych w formacie PNG, i owijanie gzip, aby zapewnić programatorowi procedury gzip. Główna różnica między owijaniem zlib a gzip polega na tym, że owijanie zlib jest bardziej kompaktowe, sześć bajtów w porównaniu z minimum 18 bajtami dla gzip, a kontrola integralności, Adler-32, działa szybciej niż CRC-32, którego używa gzip. Raw deflate jest używany przez programy, które odczytują i zapisują .zip
format, który jest innym formatem, który otacza skompresowane dane.
Zlib jest obecnie szeroko stosowany do przesyłania i przechowywania danych. Na przykład większość transakcji HTTP dokonywanych przez serwery i przeglądarki kompresuje i dekompresuje dane przy użyciu zlib, w szczególności nagłówek HTTP Content-Encoding: deflate
oznacza metodę kompresji deflate zawartą w formacie danych zlib .
Różne implementacje deflacji mogą powodować różne kompresowane dane wyjściowe dla tych samych danych wejściowych, o czym świadczy istnienie możliwych do wyboru poziomów kompresji, które pozwalają na kompromis w zakresie efektywności kompresji w odniesieniu do czasu procesora. Zlib i PKZIP nie są jedynymi implementacjami kompresji i dekompresji deflate. Zarówno narzędzie do archiwizacji 7-Zip, jak i biblioteka zopfli Google'a mogą zużywać znacznie więcej czasu procesora niż zlib, aby wycisnąć kilka ostatnich bitów możliwych przy użyciu formatu deflate, zmniejszając rozmiary skompresowane o kilka procent w porównaniu do najwyższego zlib poziom kompresji. Narzędzie Pigz, równoległa implementacja gzip, zawiera opcję użycia zlib (poziomy kompresji 1-9) lub zopfli (poziom kompresji 11) i nieco zmniejsza wpływ czasowy używania zopfli poprzez podział kompresji dużych plików na wiele procesorów i rdzeni.
.tar.gz
pliki, takie są.) Po pierwsze, tar + gzip kompresuje się lepiej niż zip, ponieważ kompresja następnego pliku może wykorzystywać historię z poprzedniego pliku (czasami nazywaną „solidnym” archiwum). zip może kompresować pliki indywidualnie. Po drugie, tar zachowuje wszystkie informacje z katalogu Uniksa, podczas gdy zip nie został do tego zaprojektowany. (Późniejsze rozszerzenia formatu zip z dodatkowymi blokami specyficznymi dla Uniksa próbują rozwiązać ten problem.)ZIP to format pliku służący do przechowywania dowolnej liczby plików i folderów wraz z bezstratną kompresją. Nie przyjmuje żadnych ścisłych założeń dotyczących zastosowanych metod kompresji, ale najczęściej stosuje się ją z DEFLATE .
Gzip jest zarówno algorytmem kompresji opartym na DEFLATE, ale mniej obciążonym potencjalnymi patentami i innymi, oraz formatem pliku do przechowywania pojedynczego skompresowanego pliku. Obsługuje kompresowanie dowolnej liczby plików i folderów w połączeniu z tar . Plik wynikowy ma rozszerzenie
.tgz
lub.tar.gz
i jest zwykle nazywany plikiem tarball .zlib to biblioteka funkcji kapsułkujących DEFLATE w najczęstszym wcieleniu LZ77 .
źródło
Najważniejszą różnicą jest to, że gzip jest w stanie skompresować tylko jeden plik, podczas gdy zip kompresuje wiele plików jeden po drugim, a następnie archiwizuje je w jednym pliku. W związku z tym gzip pojawia się w większości przypadków z tar (istnieją jednak inne możliwości). Ma to pewne zalety (nie).
Jeśli masz duże archiwum i potrzebujesz z niego tylko jednego pliku, musisz rozpakować cały plik gzip, aby dostać się do tego pliku. Nie jest to wymagane, jeśli masz plik zip.
Z drugiej strony, jeśli skompresujesz 10 podobnych lub nawet identycznych plików, archiwum zip będzie znacznie większe, ponieważ każdy plik jest kompresowany indywidualnie, podczas gdy w gzip w połączeniu z tar jeden plik jest kompresowany, co jest znacznie bardziej skuteczne, jeśli pliki są podobne (równe).
źródło