XZ arkivformat

XZ är ett arkivformat med hög komprimering som främst används för att komprimera enstaka filer, vilket erbjuder överlägsen komprimeringseffektivitet och kompatibilitet med öppen källkod. Utvecklat som en del av XZ Utils, är detta format känt för sin användning av LZMA2-kompressionsalgoritmen, som uppnår höga kompressionsförhållanden samtidigt som rimliga dekompressionshastigheter bibehålls. XZ-arkiv används i stor utsträckning vid distribution av mjukvarupaket, särskilt i Unix-liknande operativsystem som Linux.

Allmän XZ-arkivinformation

XZ-arkiv är designade för att ge effektiv komprimering med fokus på att minska filstorlekarna för lagring och distribution. Formatet använder LZMA2-algoritmen, som kombinerar ordbokskomprimering och entropikodning, vilket gör det mycket effektivt för att komprimera stora filer. XZ-arkiv innehåller vanligtvis en enda komprimerad fil, men de kan kombineras med andra verktyg som tar för att komprimera hela kataloger. XZ-formatet används ofta i programvarudistribution, säkerhetskopiering av data och arkivering, särskilt i Linux-ekosystemet, där det har blivit en standard för paketering av programvara och systemuppdateringar.

XZ Historik info

  • 2005: XZ-formatet började utvecklas som en del av XZ Utils-projektet, som syftade till att skapa en mer effektiv efterföljare till det äldre LZMA-formatet.
  • 2009: XZ Utils släpptes officiellt och introducerade XZ-formatet som en ny standard för högkompressionsbehov.
  • 2010: XZ började bli populärt i Linux-communityt och blev snabbt det föredragna formatet för att komprimera mjukvarupaket och systemarkiv.
  • 2011: Stora Linux-distributioner, inklusive Debian och Arch Linux, började använda XZ som standardkomprimeringsformat för sina paketförråd.
  • 2014: XZ:s användning expanderade bortom Linux och blev populär för plattformsoberoende programvarudistribution, särskilt för applikationer som kräver höga kompressionsförhållanden.
  • 2020: XZ används fortfarande i stor utsträckning inom mjukvarupaketering, datalagring och distribution, särskilt i miljöer där effektiv komprimering är avgörande.

Struktur för XZ-arkiv

XZ-arkivformatet är designat för enfilskomprimering och använder en enkel struktur för att uppnå höga komprimeringsförhållanden. Här är en översikt över strukturen för ett XZ-arkiv:

  1. Rubrik: Rubriken innehåller metadata om XZ-arkivet, inklusive formatversionen, flaggor och eventuella valfria tillägg som används. Det indikerar också närvaron av kontrollsummor för dataintegritet.
  2. Komprimerad dataström: Kärnan i XZ-arkivet är den komprimerade dataströmmen. Det här avsnittet innehåller de faktiska fildata, komprimerade med LZMA2-algoritmen. Dataströmmen är uppdelad i block, vilket möjliggör effektiv komprimering och dekompression. Varje block kan dekomprimeras oberoende, vilket hjälper till att återställa data även om arkivet är delvis skadat.
  3. Sidfot: Sidfoten innehåller en CRC32-kontrollsumma som verifierar arkivets integritet. Det markerar också slutet på den komprimerade dataströmmen och kan innehålla ytterligare information som ett index över block för snabb åtkomst.

XZ-komprimeringsmetoder

XZ-formatet bygger i första hand på LZMA2-komprimeringsalgoritmen, som är känd för sitt höga kompressionsförhållande och rimliga dekompressionshastighet. Här är en närmare titt på komprimeringsmetoderna förknippade med XZ:

  1. LZMA2: Detta är standard och enda komprimeringsmetod som används av XZ-arkiv. LZMA2 bygger på LZ77-algoritmen och innehåller avancerad entropikodning, vilket gör den mycket effektiv vid komprimering av stora filer. Den erbjuder justerbara kompressionsinställningar, så att användarna kan prioritera antingen kompressionshastighet eller förhållande beroende på deras behov.
  2. Filter: Förutom LZMA2 stöder XZ olika valfria filter som kan användas före komprimering för att ytterligare minska filstorleken. Dessa inkluderar deltakodning, som är användbar för att komprimera data som har små, upprepade ändringar, och BCJ (Branch/Call/Jump), som optimerar komprimeringen av körbar kod genom att omvandla vissa instruktioner till mer komprimerbara former.
  3. CRC32- och SHA-256-kontrollsummor: Även om det inte är några komprimeringsmetoder i sig, använder XZ-arkiv CRC32-kontrollsummor för integritetskontroller och stödjer valfritt SHA-256 för förbättrad dataverifiering, vilket säkerställer att de komprimerade data inte har skadats eller manipulerats.

.xz Operations som stöds

Aspose.Zip erbjuder omfattande stöd för att arbeta med .xz-arkiv, vilket gör det lättare att hantera komprimerade filer. Så här kan du göra:

  • Fullständig extraktion: Extrahera enkelt alla filer från ett .xz-arkiv och bevara integriteten och strukturen hos det ursprungliga innehållet.
  • Selektiv extraktion: Rikta in specifika filer i ett .xz-arkiv, vilket möjliggör exakt dataåterställning eller selektiv dekomprimering baserat på filnamn eller andra kriterier.
  • Datakomprimering: Skapa .xz-arkiv från filer och kataloger, med den effektiva LZMA2-komprimeringsmetoden för att minska filstorlekarna avsevärt.
  • Anpassade komprimeringsinställningar: Justera komprimeringsnivåer och andra parametrar för att balansera mellan komprimeringshastighet och filstorlek, skräddarsy processen efter dina specifika behov.

Struktur för .XZ-fil

Filformatet .xz används främst för komprimering och paketering av data. Den använder LZMA2-algoritmen för att uppnå höga kompressionsförhållanden. Här är en översikt över strukturen för ett .xz-arkiv:

  1. Strömhuvud:

    • Magiska bytes: De första 6 byten (FD 37 7A 58 5A 00) identifierar filen som ett .xz-arkiv.
    • Strömflaggor: Inkluderar detaljer som blockstorlek och komprimeringsalternativ.
  2. Blockrubrik:

    • Blockstorlek: Indikerar storleken på blocket som följer.
    • Komprimeringsmetod: Anger vilken algoritm som används (vanligtvis LZMA2).
    • Filterkedjor: beskriver eventuella ytterligare filter som applicerats före eller efter komprimering.
  3. Komprimerade datablock:

    • Data: De faktiska data komprimerade med LZMA2-algoritmen.
    • CRC32: En kontrollsumma som används för att verifiera integriteten hos den komprimerade datan.
  4. Indexavsnitt:

    • Indexdata: Ger förskjutningar till varje block och den okomprimerade storleken, vilket tillåter slumpmässig åtkomst inom den komprimerade strömmen.
    • Index CRC32: Säkerställer integriteten hos indexsektionen.
  5. Strömsidfot:

    • Strömflaggor: Upprepar strömningsflaggor från rubriken för valideringsändamål.
    • Bakåtstorlek: Storleken på indexsektionen, vilket möjliggör omvänd korsning av filen.
    • Magiska bytes: Filen slutar med en sekvens på 2 byte (59 5A) för att beteckna slutet på .xz-arkivet.
  6. Valfria metadata:

    • Vissa .xz-arkiv kan innehålla ytterligare metadata för specialfunktioner eller utökad funktionalitet, som anpassade filter eller kryptering.

Struktur för .XZ-fil

Populariteten för XZ-formatet

.xz-filformatet har vunnit betydande popularitet, särskilt i Linux- och öppen källkod, på grund av dess höga komprimeringsförhållande och effektiva resursanvändning. Det används ofta för att komprimera programvarupaket, distribuera källkod och arkivera stora datamängder. XZ Utils verktygsuppsättning ger robust stöd för att skapa, extrahera och hantera .xz-filer på olika plattformar, inklusive Linux, macOS och Windows. Även om .xz inte är lika utbrett i Windows-miljöer som ZIP eller CAB , uppskattas .xz för sin balans mellan komprimeringseffektivitet och prestanda, vilket gör det till ett föredraget val för utvecklare och systemadministratörer. Dessutom är .xz integrerat i många pakethanteringssystem, såsom Debians APT och Arch Linuxs Pacman, vilket ytterligare cementerar dess roll i mjukvarudistributionens ekosystem.

Exempel på användning av XZ Archives

Det här avsnittet ger kodexempel som visar hur man komprimerar och dekomprimerar XZ-arkiv med C# och Java. Dessa exempel använder bibliotek som Aspose.Zip för C# och den inbyggda XzArchive-klassen (beroende på Java-miljön) för att interagera med XZ-filer.

Compress XZ File via C#

    using (FileStream xzFile = File.Open("data.bin.xz", FileMode.Create))
    {
        using (FileStream source = File.Open("data.bin", FileMode.Open, FileAccess.Read))
        {
            using (var archive = new XzArchive(Aspose.Zip.Xz.Settings.XzArchiveSettings.FastestSpeed))
            {
                archive.SetSource(source);
                archive.Save(xzFile);
            }
        }
    }

Open XZ Archive via C#

    using (var archive = new XzArchive("data.bin.xz"))
    {
        archive.Extract("data.bin");
    }

Compress XZ File via C#

    try (FileOutputStream xzFile = new FileOutputStream("data.bin.xz")) {
        try (FileInputStream source = new FileInputStream("data.bin")) {
            try (XzArchive archive = new XzArchive(XzArchiveSettings.getFastestSpeed())) {
                archive.setSource(source);
                archive.save(xzFile);
            }
        }
    } catch (IOException ex) {
    }

Open XZ Archive via Java

    try (XzArchive archive = new XzArchive("data.bin.xz")) {
        archive.extract("data.bin");
    }

Aspose.Zip offers individual archive processing APIs for popular development environments, listed below:

Aspose.Zip for .NETAspose.Zip via JavaAspose.Zip via Python.NET

Ytterligare information

Folk har frågat

1. Stöds .xz på alla operativsystem?

Medan .xz är vanligast i Linux-miljöer, stöds det på alla större operativsystem. Verktyg som XZ Utils är tillgängliga för Windows och macOS, och plattformsoberoende verktyg som 7-Zip stöder också .xz-filer.

2. Vilka är fördelarna med att använda XZ-filer?

XZ-filer erbjuder flera fördelar, inklusive höga komprimeringsförhållanden, effektiv användning av systemresurser och plattformsoberoende kompatibilitet. De används ofta för att arkivera stora datamängder, distribuera mjukvarupaket och säkerhetskopiera data.

3. Kan jag komprimera flera filer till ett enda .xz-arkiv?

Till skillnad från format som ZIP eller TAR , .xz används vanligtvis för att komprimera en enda fil. Om du vill komprimera flera filer måste du först arkivera dem till en enda fil (med ett Aspose.Zip API för att skapa en .tar-fil ) och komprimera sedan arkivet med .xz, vilket resulterar i en .tar.xz-fil.