Utilizzare la compressione GZIP con ASP.NET

di Andrea Zani, in ASP.NET 2.0, System.IO, System.IO.Compression,

Oltre alle classi esterne come SharpZipLib, dalla versione 2.0 del .NET Framework è disponibile una classe apposita per la compressione degli stream.

Vediamo un esempio semplice per comprimere un file:

string SourceFile = "C:\\file.txt";
string DestinationFile = "C:\\file.gzip";

using (FileStream streamWriter = new FileStream(DestinationFile, FileMode.Create, FileAccess.Write, FileShare.None))
{
  using (FileStream streamReader = new FileStream(SourceFile, FileMode.Open, FileAccess.Read, FileShare.Read))
  {
    using (GZipStream gzip = new GZipStream(streamWriter, CompressionMode.Compress, true))
    {
      byte[] buffer = new byte[streamReader.Length];
      streamReader.Read(buffer, 0, buffer.Length);
      gzip.Write(buffer, 0, buffer.Length);
    }
  }
}

E per la decompressione:

string SourceFile = "C:\\file.gzip";
string DestinationFile = "C:\\file.txt";

using (FileStream streamReader = new FileStream(SourceFile, FileMode.Open, FileAccess.Read, FileShare.Read))
{
  using (FileStream streamWriter = new FileStream(DestinationFile, FileMode.Create, FileAccess.Write, FileShare.None))
  {
    using (GZipStream gzip = new GZipStream(streamReader, CompressionMode.Decompress, true))
    {
      const int bufferSize = 1024;
      byte[] buffer = new byte[bufferSize];

      while (true)
      {
        int count = gzip.Read(buffer, 0, bufferSize);
        if (count != 0)
          streamWriter.Write(buffer, 0, count);
        else
          break;
      }
    }
  }
}

Questa tecnica è applicabile a qualsiasi tipo di Stream, dunque si può sfruttare anche in HttpModule per comprimere al volo, in determinati casi e senza utilizzare le funzionalità native di IIS, il contenuto servito da una pagina.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi