Format archiwum V7 to format pliku używany do archiwizowania i kompresowania danych. Został wprowadzony w 1999 roku jako ulepszenie poprzedniego formatu V6. Archiwa V7 zapewniają wydajną kompresję, szybki dostęp do plików i obsługę dużych plików i archiwów.
Archiwum V7 składa się z serii bloków. Każdy blok zawiera dane pliku lub metadane archiwum. Bloki mają zmienną wielkość, z maksymalnym rozmiarem 4 GB. Archiwum zaczyna się od bloku nagłówka, który zawiera informacje o wersji formatu archiwum, liczbie bloków i katalogu zarchiwizowanych plików.
Po nagłówku następuje jeden lub więcej bloków danych pliku. Każdy plik jest przechowywany w ciągłej serii bloków danych. Pliki mogą być kompresowane przy użyciu różnych algorytmów kompresji, takich jak LZMA, BZip2 lub PPMd. Konkretna metoda kompresji używana dla każdego pliku jest określona w metadanych pliku.
Pomiędzy blokami danych pliku znajdują się bloki metadanych, które zawierają informacje o zarchiwizowanych plikach. Obejmuje to nazwę pliku, atrybuty, znaczniki czasu, metodę kompresji i lokalizację bloków danych pliku w archiwum. Metadane są przechowywane w formacie binarnym zoptymalizowanym pod kątem szybkiego dostępu losowego.
Jedną z kluczowych cech formatu V7 jest jego zdolność do wydajnego obsługiwania dużych archiwów i plików. Wykorzystuje 64-bitowy schemat adresowania, co pozwala na obsługę archiwów i plików o rozmiarze do 16 eksabajtów. Struktura bloków o zmiennej wielkości umożliwia również wydajny dostęp losowy do poszczególnych plików bez konieczności dekompresji całego archiwum.
Archiwa V7 obsługują wiele metod kompresji dla każdego pliku. Pozwala to na elastyczność w równoważeniu współczynnika kompresji i szybkości. Dostępne algorytmy kompresji obejmują:
- LZMA: Algorytm wysokiej kompresji, który zapewnia doskonałe współczynniki kompresji, ale jest stosunkowo wolny. Najlepiej nadaje się do archiwizowania danych, do których nie będzie się często uzyskiwać dostępu.
- BZip2: Algorytm kompresji ogólnego przeznaczenia z dobrym balansem szybkości i współczynnika kompresji. Kompresuje wolniej w porównaniu z LZMA, ale dekompresuje szybciej.
- PPMd: Adaptacyjny algorytm kompresji statystycznej, który może osiągnąć bardzo wysokie współczynniki kompresji dla niektórych typów danych, w szczególności tekstu. Ma jednak duże zużycie pamięci i wolniejsze prędkości kompresji.
- Deflate: Szeroko stosowany algorytm kompresji, który zapewnia szybkie prędkości kompresji i dekompresji przy rozsądnych współczynnikach kompresji. Opiera się na kodowaniu LZ77 i Huffmana.
- Brak kompresji: Pliki mogą być również przechowywane nieskompresowane, jeśli jest to pożądane.
Archiwa V7 zawierają również kontrole integralności w celu wykrywania uszkodzenia danych. Każdy blok zawiera sumę kontrolną CRC-32, która jest weryfikowana podczas odczytu bloku. Dodatkowo nagłówek archiwum zawiera skrót SHA-256 całej zawartości archiwum w celu weryfikacji integralności całego archiwum.
W celu zwiększenia odporności na błędy archiwa V7 mogą opcjonalnie zawierać rekordy odzyskiwania. Są to specjalne bloki przeplatane w całym archiwum, które zawierają nadmiarowe kopie metadanych archiwum. Jeśli blok metadanych ulegnie uszkodzeniu, można go odtworzyć z pobliskiego rekordu odzyskiwania, zapobiegając w ten sposób, aby całe archiwum stało się nieczytelne z powodu lokalnego błędu.
Format V7 obsługuje również szyfrowanie na poziomie archiwum. Całe archiwum można zaszyfrować za pomocą AES-256 w trybie CBC. Klucz szyfrowania jest wyprowadzany z hasła podanego przez użytkownika przy użyciu funkcji wyprowadzania klucza (KDF). Podczas szyfrowania generowana jest losowa 256-bitowa sól i przechowywana w nagłówku archiwum do użycia w KDF.
Dostęp do zaszyfrowanego archiwum V7 wymaga podania prawidłowego hasła. Hasło jest przekazywane przez KDF wraz z solą z nagłówka archiwum w celu ponownego wyprowadzenia klucza szyfrowania. Ten klucz jest następnie używany do odszyfrowania zawartości archiwum w locie w razie potrzeby.
Archiwa V7 można wydajnie aktualizować, modyfikując tylko odpowiednie części pliku. Dodawanie, usuwanie lub aktualizowanie plików w archiwum wiąże się z przepisaniem dotkniętych bloków danych i aktualizacją metadanych oraz rekordów odzyskiwania w razie potrzeby. Reszta archiwum pozostaje niezmieniona, co sprawia, że aktualizacje są stosunkowo szybkie.
Format V7 obsługuje również archiwizację solidną. Dzięki archiwizacji solidnej wiele plików jest kompresowanych razem jako jeden ciągły blok, co pozwala na lepsze współczynniki kompresji poprzez wykorzystanie podobieństw między plikami. Może to jednak wpłynąć na wydajność dostępu losowego i możliwość aktualizacji poszczególnych plików.
Kilka popularnych narzędzi do archiwizacji obsługuje format V7, w tym WinRAR, PowerArchiver i 7-Zip. Narzędzia te zapewniają graficzne interfejsy do tworzenia, wyodrębniania i zarządzania archiwami V7. Wiele języków programowania ma również dostępne biblioteki do pracy z archiwami V7 programowo.
Podsumowując, format archiwum V7 to potężny i elastyczny wybór do archiwizowania i kompresowania danych. Jego kluczowe cechy obejmują wydajną kompresję, szybki dostęp losowy, obsługę dużych plików i archiwów, wiele algorytmów kompresji, sprawdzanie integralności, odporność na błędy i szyfrowanie. Te możliwości sprawiają, że V7 jest dobrze przystosowany do szerokiego zakresu potrzeb archiwizacji.
Kompresja plików redukuje redundancję, dzięki czemu te same informacje wymagają mniej bitów. Górna granica jest wyznaczana przez teorię informacji: dla kompresji bezstratnej limitem jest entropia źródła (zobacz teoremę kodowania źródła Shannona source coding theorem oraz jego oryginalny artykuł z 1948 roku „A Mathematical Theory of Communication”). W kompresji stratnej kompromis między przepływnością a jakością opisuje teoria rate–distortion.
Większość kompresorów działa w dwóch etapach. Najpierw model przewiduje lub ujawnia strukturę danych. Następnie koder zamienia te przewidywania w niemal optymalne wzorce bitowe. Klasyczną rodziną modeli jest Lempel–Ziv LZ77 (1977) i LZ78 (1978) wykrywają powtarzające się podciągi i zamiast surowych bajtów emitują odwołania. Po stronie kodowania kodowanie Huffmana (zob. artykuł z 1952 r.) przypisuje krótsze kody symbolom bardziej prawdopodobnym. Kodowanie arytmetyczne i range coding są jeszcze precyzyjniejsze i zbliżają się do granicy entropii, a nowoczesne Asymmetric Numeral Systems (ANS) osiągają podobne wyniki dzięki szybkim implementacjom tablicowym.
DEFLATE (wykorzystywane przez gzip, zlib i ZIP) łączy LZ77 z kodowaniem Huffmana. Specyfikacje są publiczne: DEFLATE RFC 1951, wrapper zlib RFC 1950i format gzip RFC 1952. Gzip jest przeznaczony do strumieniowania i wprost nie oferuje dostępu losowego. Obrazy PNG standaryzują DEFLATE jako jedyną metodę kompresji (maks. okno 32 KiB) zgodnie ze specyfikacją „Compression method 0… deflate/inflate… at most 32768 bytes” oraz W3C/ISO PNG 2nd Edition.
Zstandard (zstd): nowszy uniwersalny kompresor zaprojektowany dla wysokich współczynników i bardzo szybkiej dekompresji. Format opisano w RFC 8878 (oraz lustrze HTML) i w specyfikacji referencyjnej na GitHubie. Podobnie jak gzip, podstawowa ramka nie celuje w dostęp losowy. Jednym z supermocy zstd są słowniki: niewielkie próbki z korpusu, które dramatycznie poprawiają kompresję wielu małych lub podobnych plików (zob.dokumentację słowników python-zstandard i przykład Nigela Tao). Implementacje akceptują zarówno słowniki „unstructured”, jak i „structured” (dyskusja).
Brotli: zoptymalizowane pod kątem treści webowych (np. fonty WOFF2, HTTP). Łączy statyczny słownik z jądrem LZ+entropia podobnym do DEFLATE. Specyfikacja to RFC 7932, które opisuje też okno 2WBITS−16 z WBITS w [10, 24] (1 KiB−16 B do 16 MiB−16 B) i stwierdza, że nie zapewnia dostępu losowego. Brotli często pokonuje gzip na tekstach webowych, jednocześnie szybko dekodując.
Kontener ZIP: ZIP to archiwum plików, które może przechowywać wpisy z różnymi metodami kompresji (deflate, store, zstd itd.). De facto standardem jest APPNOTE PKWARE (zob.portal APPNOTE, hostowaną kopięoraz omówienia LC ZIP File Format (PKWARE) / ZIP 6.3.3).
LZ4 celuje w surową szybkość przy umiarkowanych współczynnikach. Zobacz stronę projektu („extremely fast compression”) oraz opis formatu ramek. Idealne do cache w pamięci, telemetrii lub wrażliwych ścieżek, gdzie dekompresja musi być prawie tak szybka jak RAM.
XZ / LZMA goni za wysoką gęstością (świetnymi współczynnikami) kosztem wolniejszej kompresji. XZ to kontener; ciężar pracy wykonują zwykle LZMA/LZMA2 (modelowanie podobne do LZ77 + range coding). Zobacz format .xz, specyfikację LZMA (Pavlov)oraz notatki jądra Linux o XZ Embedded. XZ zwykle kompresuje lepiej niż gzip i często konkuruje z nowoczesnymi kodekami wysokiego współczynnika, ale wymaga dłuższego kodowania.
bzip2 stosuje Transformację Burrowsa–Wheelera (BWT), move-to-front, RLE i kodowanie Huffmana. Zwykle daje mniejsze pliki niż gzip, ale działa wolniej; zobacz oficjalny podręcznik oraz stronę man (Linux).
Liczy się „rozmiar okna”. Odwołania w DEFLATE mogą sięgać tylko 32 KiB wstecz (RFC 1951) oraz limitu PNG 32 KiB opisanego tutaj. Brotli ma okno od ~1 KiB do 16 MiB (RFC 7932). Zstd dostraja okno i głębokość wyszukiwania poziomami (RFC 8878). Podstawowe strumienie gzip/zstd/brotli są projektowane do sekwencyjnego dekodowania; same formaty nie gwarantują dostępu losowego, choć kontenery (np. indeksy tar, ramek chunked lub indeksy specyficzne dla formatu) mogą go dodać.
Powyższe formaty są bezstratne: odtwarzają dokładnie te same bajty. Kodeki multimedialne często są stratne: odrzucają niewidoczne szczegóły, by osiągnąć niższe bitrate’y. W obrazach klasyczny JPEG (DCT, kwantyzacja, kodowanie entropijne) jest standaryzowany w ITU-T T.81 / ISO/IEC 10918-1. W audio MP3 (MPEG-1 Layer III) i AAC (MPEG-2/4) używają modeli percepcyjnych i transformacji MDCT (zob.ISO/IEC 11172-3, ISO/IEC 13818-7i przegląd MDCT tutaj). Metody stratne i bezstratne mogą współistnieć (np. PNG do UI, kodeki webowe dla obrazów/wideo/audio).
Teoria Shannon 1948 · Rate–distortion · Kodowanie Huffman 1952 · Kodowanie arytmetyczne · Range coding · ANS. Format DEFLATE · zlib · gzip · Zstandard · Brotli · LZ4 frame · Format XZ. Stos BWT Burrows–Wheeler (1994) · podręcznik bzip2. Media JPEG T.81 · MP3 ISO/IEC 11172-3 · AAC ISO/IEC 13818-7 · MDCT.
Podsumowanie: wybierz kompresor dopasowany do danych i ograniczeń, mierz na prawdziwych próbkach i nie zapominaj o zyskach ze słowników oraz sprytnego ramek. Z odpowiednią parą uzyskasz mniejsze pliki, szybsze transfery i żwawsze aplikacje bez poświęcania poprawności czy przenośności.
Kompresja plików to proces, który zmniejsza rozmiar pliku lub plików, zazwyczaj w celu oszczędności miejsca na dysku lub przyspieszenia transmisji przez sieć.
Kompresja plików działa poprzez identyfikowanie i usuwanie nadmiarowej informacji w danych. Wykorzystuje algorytmy do kodowania oryginalnych danych w mniejszej przestrzeni.
Dwa główne typy kompresji plików to kompresja bezstratna i stratna. Kompresja bezstratna pozwala na idealne przywrócenie oryginalnego pliku, podczas gdy kompresja stratna umożliwia znaczniejsze zmniejszenie rozmiaru kosztem pewnej utraty jakości danych.
Popularnym przykładem narzędzia do kompresji plików jest WinZip, który obsługuje wiele formatów kompresji, w tym ZIP i RAR.
W przypadku kompresji bezstratnej, jakość pozostaje niezmieniona. Jednak przy kompresji stratnej może dojść do zauważalnego spadku jakości, ponieważ eliminuje ona mniej ważne dane, aby bardziej znacząco zmniejszyć rozmiar pliku.
Tak, kompresja plików jest bezpieczna pod względem integralności danych, zwłaszcza przy kompresji bezstratnej. Jednak, jak wszystkie pliki, skompresowane pliki mogą być celem dla złośliwego oprogramowania lub wirusów, dlatego zawsze ważne jest, aby mieć zainstalowane wiarygodne oprogramowanie zabezpieczające.
Prawie wszystkie typy plików można skompresować, w tym pliki tekstowe, obrazy, audio, wideo i pliki oprogramowania. Jednak poziom możliwej do osiągnięcia kompresji może znacznie różnić się w zależności od typu pliku.
Plik ZIP to typ formatu pliku, który wykorzystuje kompresję bezstratną do zmniejszenia rozmiaru jednego lub więcej plików. Wiele plików w pliku ZIP jest efektywnie grupowanych razem w jeden plik, co ułatwia również udostępnianie.
Technicznie tak, chociaż dodatkowe zmniejszenie rozmiaru może być minimalne lub nawet niekorzystne. Kompresowanie już skompresowanego pliku czasami może zwiększyć jego rozmiar z powodu metadanych dodawanych przez algorytm kompresji.
Aby rozpakować plik, zazwyczaj potrzebujesz narzędzia do dekompresji lub rozpakowywania, takiego jak WinZip czy 7-Zip. Te narzędzia mogą wyodrębnić oryginalne pliki z formatu skompresowanego.