Stora filer komprimeras och dekomprimeras med hjälp av olika algoritmer och tekniker, vilket ofta använder en kombination av metoder för optimala resultat. Kärnprincipen är att identifiera och ta bort redundans i uppgifterna och representera den i en mer kompakt form. Här är en uppdelning:
Kompressionstekniker:
* Förlustfri komprimering: Denna typ av kompression garanterar perfekt rekonstruktion av originaldata efter dekomprimering. Det är avgörande för filer där till och med en liten bit av dataförlust är oacceptabelt (t.ex. textdokument, källkod, kalkylblad). Vanliga metoder inkluderar:
* ordbokbaserad kompression (LZ77, LZ78, LZW): Dessa algoritmer identifierar upprepande sekvenser av byte (eller tecken) i data och ersätter dem med kortare referenser. Tänk på det som att skapa en ordbok med vanliga fraser och använda koder för att representera dem. Exempel inkluderar GZIP och ZIP (som ofta använder en kombination av metoder).
* huffman kodning: Denna statistiska metod tilldelar kortare koder till mer frekventa symboler (byte eller tecken) och längre koder till mindre frekventa. Det är mycket effektivt för textfiler där vissa tecken verkar mycket oftare än andra.
* aritmetisk kodning: I likhet med Huffman-kodning, men istället för att tilldela koder med fast längd, tilldelar den fraktionella koder, vilket leder till något bättre kompressionsförhållanden.
* Burrows-Wheeler Transform (BWT): Denna teknik ordnar om data för att förbättra effektiviteten hos andra kompressionsmetoder som körlängd kodning (RLE). Det används ofta i samband med flytt-till-front-transformation (MTF) och Huffman-kodning (som ses i BZIP2).
* Kontextblandning: Detta är en mer avancerad teknik där kompressionsalgoritmen tar hänsyn till sammanhanget kring varje byte/tecken när du väljer en kod. Detta hjälper till att utnyttja komplexa uppsägningar som andra metoder kan missa.
* Lossy Compression: Denna typ av kompression offrar vissa data för att uppnå högre kompressionsförhållanden. Det är acceptabelt för data där en mindre kvalitetsförlust är acceptabel (t.ex. bilder, ljud, video). Vanliga metoder inkluderar:
* jpeg (bilder): Använder diskret kosinustransform (DCT) för att minska mängden data som behövs för att representera en bild.
* mp3 (ljud): Använder perceptuell kodning för att ta bort ljud som troligen kommer att maskeras av andra ljud.
* mpeg (video): Använder olika tekniker som rörelsekompensation och DCT för att komprimera video effektivt.
Kompressions-/dekomprimeringsprocessen:
1. Analys: Kompressorn analyserar inmatningsdata för att identifiera mönster och uppsägningar. Denna analys är algoritmspecifik.
2. Transformation: Uppgifterna omvandlas baserat på den valda algoritmen. Detta kan involvera omarrangerande byte, skapa ordböcker eller tillämpa matematiska transformationer.
3. Kodning: De transformerade uppgifterna kodas till en mer kompakt representation med hjälp av koder (Huffman -koder, aritmetiska koder etc.). Metadata om den använda kompressionsmetoden ingår ofta.
4. lagring/växellåda: De komprimerade uppgifterna lagras i en fil eller överförs över ett nätverk.
5. Avkodning: Dekompressorn får komprimerad data och vänder kodningsprocessen.
6. omvänd transformation: Dekompressorn tillämpar den inversa av omvandlingen som användes under komprimering.
7. rekonstruktion: För förlustfri komprimering rekonstrueras de ursprungliga uppgifterna perfekt. För förlustkomprimering rekonstrueras en nära tillnärmning av originaldata.
Programvara och hårdvara:
Olika mjukvaruverktyg (som `gzip`,` zip`, `7-zip`,` bzip2`) och bibliotek implementerar dessa algoritmer. Moderna CPU:er har ofta instruktioner som påskyndar vissa kompressionsoperationer och specialiserad hårdvara (som komprimeringsko-processorer) kan påskynda processen för mycket stora filer avsevärt. Molnlagringsleverantörer använder också optimerade kompressionstekniker i skala.