Löst: gzip byte array

Senaste uppdateringen: 09/11/2023
Författare: C SourceTrail

Visst, låt oss fördjupa oss i världen av GZip-komprimering i C#.

Termen "GZip" kan verka lite teknisk och skrämmande till en början, men dess koncept och implementering är ganska enkla. I dess kärna, GZip är ett filformat som oftast används för filkomprimering och dekomprimering. I en värld av webbutveckling och dataöverföring över Internet spelar GZip en betydande roll för att optimera storleken på data som skickas, vilket gör dataöverföringsprocessen snabbare och mer effektiv.

I programmeringsspråket C# är System.IO.Kompression namnutrymme tillhandahåller de metoder och klasser som krävs för att effektivt hantera GZip-komprimering. Låt oss nu dyka in i hur av det – använder GZip för att komprimera och dekomprimera en byte-array.

Lösning på problemet

För att zippa en byte-array kommer vi att använda klassen GZipStream och MemoryStream-klassen som finns i namnrymden System.IO och System.IO.Compression.

[section=code lang="C#"]

offentlig statisk byte[] GZipCompress(byte[] data)
{
använder(MemoryStream ms = new MemoryStream())
using(GZipStream gzip = new GZipStream(ms, CompressionMode.Compress, true))
{
gzip.Write(data, 0, data.Length);
}
returnera ms.ToArray();
}

Och för att dekomprimera en komprimerad byte-array med GZip kommer vi att använda både GZipStream- och MemoryStream-klasserna igen, men den här gången med en twist.

offentlig statisk byte[] GZipDecompress(byte[] data)
{
använder(MemoryStream output = new MemoryStream())
använder(MemoryStream input = new MemoryStream(data))
using(GZipStream gzip = new GZipStream(input, CompressionMode.Decompress))
{
gzip.CopyTo(output);
}
returnera output.ToArray();
}

De två kodavsnitten ovan visar en lösning för att komprimera och dekomprimera en byte-array med GZip i C#.

Steg-för-steg-förklaring av koden

I kompressionsmetoden, stegen är enkla:

  • En ny MemoryStream-instans skapas.
  • En ny GZipStream-instans skapas som använder den tidigare nämnda MemoryStream som sin basström. Komprimeringsläget är inställt på 'Komprimera'.
  • Bytedata skrivs till GZipStream som komprimerar den.
  • Slutligen extraheras den komprimerade datan från MemoryStream med dess ToArray()-metod.

I dekompressionsmetoden:

  • En utdata-MemoryStream-instans och en MemoryStream-instans som innehåller den komprimerade datan skapas.
  • En GZipStream-instans skapas med ingången MemoryStream och CompressionMode är satt till 'Decompress'.
  • Slutligen kopieras den dekomprimerade datan till utgången MemoryStream och den returneras som en byte-array.

GZipStream-klass

Klassen GZipStream, inrymd i namnutrymmet System.IO.Compression i C#, är ett kraftfullt verktyg för att komprimera och dekomprimera data. Den erbjuder inbyggda alternativ för att bestämma vilken komprimeringsnivå du behöver, allt från ingen komprimering till optimal komprimering.

MemoryStream-klass

Klassen MemoryStream, under namnområdet System.IO, representerar en ström i minnet. Det används vanligtvis för att läsa från eller skriva till byte-arrayer utan behov av ett stödlager.

Detta är bara korta översikter av dessa ämnen. För att till fullo förstå potentialen i dessa bibliotek, dyk djupare in i tjänstemannen C# dokumentation och experiment med olika scenarier och användningsfall. Kom ihåg att praktisk erfarenhet och experimentering ofta är de bästa sätten att lära sig och bemästra programmeringskoncept.

Relaterade inlägg: