venerdì 2 dicembre 2011

Comprimere e decomprimere con .Net 2.0

Ecco come usare gli oggetti per la compressione messi a disposizione dal Framework .NET 2.0
//C#
using System.IO;
using System.IO.Compression;


public static class Compressor
{
 public static byte[] Compress(byte[] data)
 {
  MemoryStream output = new MemoryStream();
  GZipStream gzip = new GZipStream(output, CompressionMode.Compress, true);
  gzip.Write(data, 0, data.Length);
  gzip.Close();
  return output.ToArray();
 }


 public static byte[] Decompress(byte[] data)
 {
  MemoryStream input = new MemoryStream();
  input.Write(data, 0, data.Length);
  input.Position = 0;
  GZipStream gzip = new GZipStream(input, CompressionMode.Decompress, true);
  MemoryStream output = new MemoryStream();
  byte[] buff = new byte[64];
  int read = -1;
  read = gzip.Read(buff, 0, buff.Length);
  

  while (read > 0)
  {
   output.Write(buff, 0, read);
   read = gzip.Read(buff, 0, buff.Length);
  }
  

  gzip.Close();
  return output.ToArray();
 }
}
'VB
Imports System.IO
Imports System.IO.Compression


Public Class Compressor


 Public Shared Function Compress(ByVal data As Byte()) As Byte()
  Dim output As MemoryStream = New MemoryStream
  Dim gzip As GZipStream = New GZipStream(output, CompressionMode.Compress, True)
  gzip.Write(data, 0, data.Length)
  gzip.Close()
  Return output.ToArray
 End Function


 Public Shared Function Decompress(ByVal data As Byte()) As Byte()
  Dim input As MemoryStream = New MemoryStream
  input.Write(data, 0, data.Length)
  input.Position = 0
  Dim gzip As GZipStream = New GZipStream(input, CompressionMode.Decompress, True)
  Dim output As MemoryStream = New MemoryStream
  Dim buff(64) As Byte
  Dim read As Integer = -1
  read = gzip.Read(buff, 0, buff.Length)


  While read > 0
   output.Write(buff, 0, read)
   read = gzip.Read(buff, 0, buff.Length)
  End While


  gzip.Close()
  Return output.ToArray
 End Function


End Class