2010-05-10 8 views
7

Sí, sé que GZipStream o DeflateStream son los más comunes en .NET Framework que manejan la compresión/descompresión.¿Mejor clase de compresión de .NET Framework?

Deseo tener comprimir/descomprimir funciones en mi programa, pero

  1. Me gustaría un .NET Framework C#, ni una fuente abierta tercera parte. No puedo usar debido a esas restricciones de derechos de autor en mi programa.

  2. GZipStream y DeflateStream no son tan buenos. por ejemplo, GZipStream comprime un archivo a 480 KB mientras que 7Zip comprime el mismo archivo al tamaño de 57 KB.

¿Microsoft tiene otros buenos métodos de compresión?

Gracias

+0

Gracias por todas sus respuestas. ¿Puedo preguntar si DeflateStream está usando la codificación Huffman? – Jack

+0

Tanto 'DeflateStream' como' GZipStream' usan una combinación del algoritmo LZ77 y la codificación Huffman (vea http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx y http://msdn.microsoft.com/en-us/library/system.io.compression.deflatestream.aspx). 'Deflate' es el algoritmo de compresión puro, mientras que' GZipStream' incluye una suma de comprobación CRC y * podría * extenderse al escribir diferentes algoritmos de compresión (El framework .net actual solo implementa ese algoritmo de compresión). –

Respuesta

5

GZipStream y DeflateStream están destinados específicamente para comprimido arroyos, no de compresión general de archivos para su almacenamiento.

Aparte de esas clases, la compresión no está integrada en .NET. Si desea una compresión de alta calidad, tendrá que ir a una biblioteca de terceros. Consulte http://www.7-zip.org/sdk.html para obtener una biblioteca de código abierto 7zip.

+0

La página web establece que "LZMA SDK se coloca en el dominio público", lo que significa que es de uso gratuito, como prefiera, ¿no es así? –

+0

Dave lo dirigió en la dirección correcta, pero Stefan dio el enlace a la implementación .Net lista para usar del algoritmo 7zip (que es lzma). – Oliver

+0

Absolutamente, gratis para todos. El OP dice que no quiere "fuente abierta de terceros". Si el costo no es la preocupación, no estoy seguro de qué es. –

1

No tengo ninguna estadística con respecto a las tasas de compresión, pero he estado usando la biblioteca SharpZipLib durante años con mucho éxito.

2

Hay un contenedor administrado para 7zip. La licencia es LGPL para que pueda usarla en proyectos de código cerrado. No sé si esto se ajusta a los requisitos de su licencia ya que no los declaró.

http://sevenzipsharp.codeplex.com/

0

también puede utilizar el código abierto ZLib (http://www.zlib.net/) con PInvoke, o utilizar un envoltorio para él (que he usado zlib.net - http://www.componentace.com/zlib_.NET.htm - pero yo creo que tenía algunos errores). es menos conveniente que las bibliotecas administradas, pero es más eficiente que DeflateStream/GZipStream (que son las mismas excepto por un CRC adicional en GZipStream).