GZIP straumes konvertors uz neapstrādātu DEFLATE
GZIP straumes konvertēšana uz neapstrādātu DEFLATE noņem ārējo faila ietvaru un galvenes metadatus, atstājot tikai saspiesto datu kopu specializētiem tīkla protokoliem un zema līmeņa arhīviem.
Formātu salīdzinājums un tehniskās specifikācijas
| Specifikācija | GZIP | DEFLATE |
|---|---|---|
| MIME tips | application/gzip | application/zlib |
| Tips | DEFLATE stream container | raw DEFLATE stream |
| Kompresija | DEFLATE (RFC 1951) | LZ77 + Huffman coding |
| Standarta specifikācija | IETF RFC 1952 | IETF RFC 1950 / RFC 1951 |
| Maģisko baitu galvene | 1F 8B (gzip ID1/ID2) | 78 01 / 78 9C / 78 DA (zlib header bytes) |
Formāta pārskats un lietojums
GZIP straumes konvertēšana neapstrādātā DEFLATE notiek bieži tīmekļa izstrādē, tīkla programmēšanā un zema līmeņa datu glabāšanas darbplūsmatos. Izstrādātāji bieži strādā ar GZIP, kad saglabā atsevišķus failus diskā, jo formāts ietver noderīgus metadatus, piemēram, oriģinālos failu nosaukumus un modifikācijas laika zīmogus. Tomēr mūsdienu HTTP saspiešanas protokoli un noteikti binārie formāti sagaida tikai saspiesto datu kopu bez jebkādiem ietvara baitiem. Šīs konversijas veikšana ļauj inženieriem tieši padot standarta saspiestos datus tīkla straumēs vai pielāgotos parsētājos. Piemēram, pielāgotas HTTP atbildes apstrādes programmas izveide vai darbs ar ZIP arhīviem bieži prasa GZIP galvenes un CRC32 kājenes noņemšanu, lai izolētu neapstrādāto algoritma izvadi. Šo papildu konteinera datu noņemšana samazina pieskaitāmās izmaksas, kad katrs nepieciešamais baits ir svarīgs ierobežotās programmēšanas vidēs.
Tehniskās specifikācijas un kodeku sadalījums
GZIP straume, kas identificēta ar MIME tipu application/gzip, izmanto konteinera struktūru, kas definēta RFC 1952. Tā sākas ar divu baitu maģiskā numura galveni (0x1F, 0x8B), kam seko saspiešanas karodziņi, modifikācijas laiks, operētājsistēmas ID un neobligāts faila nosaukums. Faktiskie saspiestie dati atrodas vidū, un fails beidzas ar četru baitu CRC32 kontrolsummu un četru baitu nesaspiestā izmēra rādītāju. Turpretī neapstrādāts DEFLATE, ko identificē application/zlib vai neapstrādātas straumes, balstās uz RFC 1951. Tas nesatur maģiskos baitus, galvenes un kājenes. Tas izmanto LZ77 algoritmu apvienojumā ar Hafmana kodējumu, lai tieši saglabātu saspiestos blokus. Konvertēšana starp tiem ir pilnībā bezzaudējumu, jo abi formāti izmanto precīzi to pašu DEFLATE saspiešanas dzinēju. Konversijas procesā GZIP ietvars vienkārši tiek iztints, metadati tiek atmesti, un tiek iegūta iekšējā DEFLATE baitu straume.
OS un pārlūkprogrammu saderība
Neapstrādātas DEFLATE straumes darbojas vietējā līmenī visās modernajās operētājsistēmās un tīmekļa izpildlaikos, izmantojot standarta programmēšanas valodas, piemēram, Python, Node.js un C++. Pārlūkprogrammas apstrādā DEFLATE vietējā līmenī, izmantojot HTTP satura kodējuma galvenes steku. Operētājsistēmas, piemēram, Windows, macOS un Linux, atbalsta neapstrādātas straumes, izmantojot sistēmas saspiešanas bibliotēkas, piemēram, zlib. Mobilās platformas, tostarp Android un iOS, nodrošina tiešu API piekļuvi DEFLATE rutīnām pielāgotiem lietotņu krātuves slāņiem.
💡 Noderīga informācija
Vienmēr pārbaudiet, vai jūsu mērķa parsētājs sagaida tīru RFC 1951 straumi, nevis zlib ietvertu straumi, jo zlib pievieno divu baitu galveni, kuru neapstrādātie DEFLATE parsētāji noraidīs.
Formātu salīdzinājums un tehniskās specifikācijas
10 megabaitu teksta fails, kas saspiests GZIP straumē, sarūk līdz aptuveni 2 megabaitiem. Galvenes un kājenes noņemšana, lai izveidotu neapstrādātu DEFLATE failu, dod identisku 2 megabaitu datu kopas izmēru. Šī 2 megabaitu faila pārsūtīšana aizņem aptuveni 0,04 sekundes 500 Mbps optiskā tīkla savienojumā, aptuveni 0,4 sekundes standarta 5G tīklā un apmēram 4 sekundes pārslogotā 4G mobilajā saitē.
Biežāk uzdotie jautājumi
Kā konvertēt GZIP straumi uz neapstrādātu DEFLATE bez kvalitātes zuduma?
Abi formāti izmanto identiskus bezzaudējumu saspiešanas algoritmus. To konvertēšana vienkārši nozīmē GZIP konteinera nolasīšanu, desmit baitu galvenes un astoņu baitu kājenes noņemšanu un iekšējo saspiesto bloku saglabāšanu. Dati netiek zaudēti, jo pamatā esošais algoritms paliek nemainīgs.
Kāda ir atšķirība starp GZIP straumi un neapstrādātu DEFLATE?
GZIP ir pilnīgs faila konteiners, kas ietver maģiskā baitu galveni, oriģinālos failu nosaukumus, modifikācijas laika zīmogus un kontrolsummas kājeni. Neapstrādāts DEFLATE ir tikai paši saspiestie dati, kas nesatur galvenes, kājenes vai faila metadatus.