Mine sisu juurde

ZIP

Allikas: Vikipeedia

ZIP on failivorming, mis võimaldab andmeid kadudeta pakkida ning hoiustada arhiivis. ZIP arhiiv suudab hoiustada mitut faili, kausta ja ka teisi ZIP arhiive.

ZIP failiformaadi loojaks on Phil Katz.[1]

Ülesehitus

[muuda | muuda lähteteksti]

.ZIP failid on arhiivid, milles on andmete organiseerimiseks kasutatud päiseid.

Lokaalne failipäis

[muuda | muuda lähteteksti]

Iga hoiustatud faili jaoks luuakse lokaalne faili päis (local file header), mis asub enne faili andmeid.

Lokaalse failipäise formaat
Suurus baitidesVälja kirjeldus (punkt 4.3.7)[2]
4Signatuur (on alati 50 4B 03 04)
2Mis zip versiooni on vaja, et andmeid lahti pakkida
2Üldine lipp
2Pakkimis meetod
2Viimane faili muutmise aeg
2Viimane faili muutmise kuupäev
4CRC-32 pakkimata andmetest
4Pakitud andmete kogus
4Pakkimata andmete kogus
2Failinime suurus (a)
2Lisa välja suurus (b)
aFailinimi
bLisa väli

Andmete kirjeldus päis

[muuda | muuda lähteteksti]

Kui faili pakkimata ja pakitud suurused ei ole lokaalse faili päise kirjutamise ajal teada, siis seatakse vastavate väljade väärtusteks 0. Seatakse ka välja “üldine lipp” kolmas bitt aktiivseks, mis annab märku, et päris faili suurused on andmete kirjeldus päises (data descriptor), mis on leitav kohe peale faili andmeid. (punkt 4.3.9.1)[2]

Andmete kirjeldus päise formaat
Suurus baitidesVälja kirjeldus (punkt 4.3.9)[2]
4CRC-32
4Pakitud andmete kogus
4Pakkimatta andmete kogus

Peamine päis

[muuda | muuda lähteteksti]

Peale viimase faili andmeid on iga arhiivis oleva faili jaoks eraldi loodud peamine päis (central directory file header), mis lisaks enda unikaalsele informatsioonile sisaldab ka kõiki andmeid, mis olid selle lokaalses faili päises. Selline informatsiooni kordamine muudab ZIP-failid andmekao vastu kindlamaks.[3]

Peamise päise formaat
Suurus baitidesVälja kirjeldus (punkt 4.3.12)[2]
4Signatuur (on alati 50 4B 01 02)
2Arhiivi versioon
2ZIP versioon mida on vaja et andmeid lahti pakkida
2Üldine lipp
2Pakkimise meetod
2Viimane faili muutmise aeg
2Viimane faili muutmise kuupäev
4CRC-32 pakkimatta andmetest
4Pakitud andmete kogus
4Pakkimatta andmete kogus
2Faili nime suurus (a)
2Lisa välja suurus (b)
2Faili kommentaari suurus (c)
2Ketta number millel algab lokaalne faili päis
4Sisemised faili omadused (kas fail on ASCII tekstifail või sisaldab binaar andmeid)
4Välised faili omadused (tähendus sõltub “arhiivi versioon” väljast)
4Nihe arhiivi algusest kuni faili lokaalse päise alguseni
aFaili nimi
bLisa väli
cFaili kommentaar

Lõpu päis

[muuda | muuda lähteteksti]

ZIP arhiivi kõige lõpus on lõpu päis (End of central directroy record)

Lõpu päise formaat
Suurus baitidesVälja kirjeldus (punkt 4.3.16)[2]
4Signatuur (on alati 50 4B 05 06)
2Ketta number millel see sama päis asub
2Ketta number millel asub esimese faili peamine päis
2Peamiste päiste arv sellel kettal
2Peamiste päiste arv kokku
4Peamiste päiste suurus kokku
4Esimese faili peamise päise nihe arhiivi algusest
2Kommentaari pikkus (a)
aKommentaar

Kui teha ZIP fail, mis ei hoiusta mitte ühtegi faili, sisaldab loodud ZIP fail ainult lõpu päist. See tähendab, et kõige väiksem ZIP fail, mida on võimalik luua, on 22 baidi suurune.

Vaikimisi kasutavad ZIP arhiivid 32 bitist formaati, et luua päiseid mistõttu suudavad sellised arhiivid hoida 2^32 - 1 baiti. Juhul kui hoiustatud faili maht on suurem kui 0xFFFFFFFF siis luuakse päised ZIP64 formaadi,s mis on võimeline hoiustama 2^64 - 1 baidi suuruseid faile. (punkt 4.3.9.2)[2]

ZIP64 saavutab suurema andmemahu muutes päiste loogikat.

Juhul kui mõne faili lokaalse või peamise päise välja ei mahu andmed ära siis seatakse välja väärtus maksimaalseks. See annab märku, et päris väärtused on ZIP64 lisa väljas, mis paigutatakse päise “Lisa väli” välja. (punkt 4.4.1.4)[2]

ZIP64 lisa väljas on andmed alati samas järjekorras kuid lisatakse ainult andmed mis ei mahtunud nende algsesse päisesse.

ZIP64 lisa välja formaat
Suurus baitidesVälja kirjeldus (punkt 4.5.3)[2]
2Signatuur (0x0001 ütleb et on tegemist ZIP64 lisa väljaga)
2Kogu ZIP64 lisa välja suurus
8Pakkimatta faili andmete kogus
8Pakitud faili andmete kogus
8Nihe arhiivi algusest kuni faili lokaalse päise alguseni
4Ketta number millel algab faili lokaalne päis

Lisatakse juurde uus ZIP64 lõpu päis (zip64 end of central directory record) ja ka eraldi väli selle päise leidmiseks (zip64 end of central directory locator).

ZIP64 lõpu päise formaat
Suurus baitidesVälja kirjeldus (punkt 4.3.14)[2]
4Signatuur (on alati 50 4B 05 06)
8Ülejäänud päise suurus (kogu päise suurus miinus 12 baiti)
2Arhiivi versioon
2ZIP versioon mida on vaja et andmeid lahti pakkida
4Ketta number millel päis asub
4Ketta number millel algavad failide peamised päised
8Peamiste päiste arv sellel kettal
8Peamiste päiste arv kokku
8Peamiste päiste suurus kokku
8Nihe arhiivi algusest kuni esimese peamise päiseni

ZIP64 lõpu päise leidja asetatakse ZIP64 lõpu päise ja originaalse lõpu päise vahele.

ZIP 64 lõpu päise leidja formaat
Suurus baitidesVälja kirjeldus (punkt 4.3.15)[2]
4Signatuur on alati 50 4B 06 07
4Ketta number millel ZIP64 lõpu päis algab
8nihe arhiivi algusest ZIP64 lõpu päiseni
4Arv mitmel kettal arhiiv on hoiustatud

ZIP arhiive on võimalik jagada väiksemateks osadeks (“splitting”) sellisel viisil loodud failide lõppu tuleb .zip asemele .z(n) kus n sõltub loodud failide arvust. Näiteks jagades üks zip arhiiv kolmeks osaks on kõigi failide nimed järgmised: failinimi.z01, failinimi.z02, failinimi.zip.

fail, mille lõppu jääb .zip, sisaldab alati lõpu päist.

ZIP arhiivi erinevaid osasid on võimalik hoiustada erinevatel ketastel (“spanning”). Sellisel juhul võivad jääda kõikide osade nimed identseks ning ZIP arhiivi algusesse pannakse eriline 4 baidine märge “0x08074b50”. (punkt 8.0)[2]

Andmete pakkimine

[muuda | muuda lähteteksti]

Vaikimisi kasutatakse andmete pakkimiseks DEFLATE algoritmi.

Võidakse kasutada ka teisi pakkimis meetode nagu näiteks Implode, BZIP2, LZMA, z/OS CMPSC, LZ77, Zstandard, XZ, WavPack ja PPMd (punkt 4.4.5)[2]

ZIP arhiivid võivad hoida andmeid ka pakkimata kujul.

ZIP faile, mille eesmärgiks on pakkida kokku võimalikult palju andmeid ning siis üle koormata süsteemi, mille peal fail lahti pakitakse nimetatakse ZIP-pommideks.

Üks tuntuium ZIP-pomm on 42 KB suurune fail nimega 42.zip mille täielikuks lahtipakkimiseks läheks vaja 4,5 petabaiti ruumi.[4]