2009. október 15., csütörtök

SharpZipLib

Ugyan a C#-nak van beépített tömörítő függvénye, de én mégis jobban preferálom a sharpdevelop SharpZipLib könyvtárának függvényeit. Állandó probléma a tömörítő könyvtárak API-jával hogy körülményesek, és ritkán vannak olyan függvények hogy "itt az adat tömörítsd". Ez különösen igaz a BZIP2-re, amit eredetileg stream észrevétlen tömörítésére terveztek de nagy ereje miatt általánosan használt lett. Ezért írtam két függvényt bináris adat ki és betömörítésére BZIP2-vel. Ahhoz hogy használjuk az alábbi függvényeket, hozzunk létre egy hivatkozást (project menü > add reference) az ICSharpCode.SharpZipLib.dll-re (a Visual Studio majd bemásolja az exe mellé). És itt a kód:
   using System;
using System.IO;
using System.Text;
using ICSharpCode;

namespace Ird_ide_a_programod_namespace_et
{
class BZip2
{
///
/// Adat tömörítése BZip2-vel.
///

/// Tömörítendő adat.
/// Tömörített adat.
public static byte[] Compress(byte[] data)
{
try
{
MemoryStream output = new MemoryStream();
ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream bout =
new ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream(output);
bout.Write(data, 0, Convert.ToInt32(data.Length));
bout.Close();
output.Close();
return output.ToArray();
}
catch (Exception e)
{
throw (e);
}
}

///
/// BZip2-vel tömörített adat kitömörítése.
///

/// Tömörített adat.
/// A memóriában foglalható max. hely. (byte)
/// Kitömörített adat.
public static byte[] Decompress(byte[] data, int MaxData)
{
try
{
MemoryStream input = new MemoryStream(data);
ICSharpCode.SharpZipLib.BZip2.BZip2InputStream b_in =
new ICSharpCode.SharpZipLib.BZip2.BZip2InputStream(input);
byte[] output = new byte[MaxData];
b_in.Read(output, 0, MaxData);
b_in.Close();
input.Close();
return output;
}
catch (Exception e)
{
throw (e);
}
}
}
}

1 megjegyzés :

  1. Üdv!

    Adatokat generálok és szeretném őket fileba írni, csakhát sokan vannak. Szóval mielőtt neki esnék, egy algoritmust kreálni, ami összerántja őket próbálkozom (#ziplib-el is), hátha van valami készen, ami megfelelő hatékonysággal megoldja nekem.
    Tudna valaki tanácsot adni? Előre is köszi.

    VálaszTörlés