Konwerter GZIP na Deflate
Konwersja strumienia GZIP na surowy format DEFLATE usuwa zewnętrzną otoczkę pliku i metadane nagłówka, pozostawiając jedynie skompresowaną zawartość dla specjalistycznych protokołów sieciowych i niskopoziomowych archiwów.
Porównanie formatów i specyfikacja techniczna
| Specyfikacja | GZIP | DEFLATE |
|---|---|---|
| Typ MIME | application/ | application/ |
| Typ | kontener strumienia DEFLATE | surowy strumień DEFLATE |
| Kompresja | DEFLATE (RFC 1951) | LZ77 + kodowanie Huffmana |
| Standardowa specyfikacja | IETF RFC 1952 | IETF RFC 1950 / RFC 1951 |
| Nagłówek z bajtami identyfikującymi | 1F 8B (gzip ID1/ID2) | 78 01 / 78 9C / 78 DA (zlib header bytes) |
Przegląd formatu i zastosowania
Konwersja strumienia GZIP do surowego DEFLATE jest często wykonywana przy programowaniu stron internetowych i sieci oraz w niskopoziomowych procesach przechowywania danych. Programiści często używają GZIP do zapisywania pojedynczych plików na dysku, ponieważ format zawiera przydatne metadane, takie jak oryginalna nazwa pliku i czas modyfikacji. Nowoczesne protokoły kompresji HTTP i niektóre formaty binarne wymagają jednak samego skompresowanego ładunku, bez bajtów otoczki. Konwersja pozwala przekazywać standardowe skompresowane dane bezpośrednio do strumieni sieciowych lub własnych parserów. Na przykład przy tworzeniu własnego programu obsługi odpowiedzi HTTP lub pracy z archiwami ZIP często trzeba usunąć nagłówek GZIP i stopkę CRC32, aby wyodrębnić surowy wynik algorytmu. Usunięcie dodatkowych danych kontenera zmniejsza narzut, gdy każdy bajt ma znaczenie w środowiskach o ograniczonych zasobach.
Specyfikacja techniczna i analiza kodeków
Strumień GZIP, oznaczany typem MIME application/gzip, używa struktury kontenera określonej w RFC 1952. Zaczyna się od dwubajtowej sygnatury (0x1F, 0x8B), po której następują flagi kompresji, czas modyfikacji, identyfikator systemu operacyjnego i opcjonalna nazwa pliku. Skompresowane dane znajdują się dalej w strumieniu, który kończy się 4-bajtową sumą kontrolną CRC32 i 4-bajtowym wskaźnikiem rozmiaru po dekompresji. Surowy DEFLATE to strumień bitów zgodny z RFC 1951, bez stałej sygnatury, nagłówka ramki ani stopki. Typ MIME application/zlib oznacza otoczkę zlib zgodną z RFC 1950, która zawiera strumień DEFLATE, a nie surowy DEFLATE. Konwersja GZIP do surowego DEFLATE usuwa metadane i sumę kontrolną GZIP, zachowując skompresowany ładunek.
Zgodność z systemami operacyjnymi i przeglądarkami
Surowe strumienie DEFLATE działają w nowoczesnych systemach operacyjnych i środowiskach uruchomieniowych sieci za pośrednictwem standardowych języków programowania, takich jak Python, Node.js i C++. Przeglądarki natywnie obsługują DEFLATE w mechanizmie nagłówków kodowania treści HTTP. Systemy Windows, macOS i Linux obsługują surowe strumienie za pomocą systemowych bibliotek kompresji, takich jak zlib. Platformy mobilne Android i iOS udostępniają API do procedur DEFLATE na potrzeby niestandardowych warstw przechowywania danych aplikacji.
Przydatne informacje
Zawsze upewnij się, że twój docelowy parser oczekuje czystego strumienia zgodnego z RFC 1951, a nie strumienia owiniętego w zlib, ponieważ zlib dodaje dwubajtowy nagłówek, który parsery surowego DEFLATE odrzucą.
Często zadawane pytania
Jak przekonwertować strumień GZIP na surowy format DEFLATE bez utraty jakości?
Oba formaty używają identycznych algorytmów kompresji bezstratnej. Ich konwersja polega po prostu na odczytaniu kontenera GZIP, usunięciu dziesięciobajtowego nagłówka i ośmiobajtowej stopki oraz zapisaniu wewnętrznych skompresowanych bloków. Żadne dane nie są tracone, ponieważ leżący u ich podstaw algorytm pozostaje niezmieniony.
Czym się różni strumień GZIP od surowego formatu DEFLATE?
GZIP to kompletny kontener pliku, który zawiera nagłówek z magicznymi bajtami, oryginalne nazwy plików, znaczniki czasu modyfikacji oraz stopkę z sumą kontrolną. Surowy format DEFLATE to po prostu same skompresowane dane, nie zawierające żadnych nagłówków, stóp ani metadanych pliku.