4

我需要做的是压缩来自外部服务的 64KB 文件块,然后将压缩数据块实时传输到浏览器。Xceed Real-Time 非常棒,您可以设置文件头,然后在客户端将多个 64KB 块拼凑成一个完整的压缩文件。这很好用,您可以通过将其置于循环中轻松处理多个文件。

我的问题是:是否有可以与 Xceed 的复杂性相匹配的免费替代压缩实用程序?我需要一些可以压缩文件的一部分并将其流式传输到浏览器的东西。我见过的几乎所有免费替代品都需要在压缩之前访问整个文件。Xceed 不错,就是太贵了。只是想知道是否有可以实现此目的的免费替代方案。谢谢!

4

2 回答 2

8

您正在寻找的是流压缩方法。好消息是你有很多选择。另请注意,您必须考虑内存,因为某些解决方案(基于字典)可能需要大量内存,因此请进行测试和调整。

为了使我的回答简短,我建议尝试 LZ4。

LZ4 - http://code.google.com/p/lz4/

LZ4 是一种非常快速的无损压缩算法,提供每核 300 MB/s 的压缩速度,可通过多核 CPU 进行扩展。它还具有极快的解码器,每核速度为 GB/s,通常达到多核系统的 RAM 速度限制。

基准:

Name            Ratio  C.speed D.speed
                        MB/s    MB/s
LZ4 (r97)       2.084    410    1810
LZO 2.06        2.106    409     600
QuickLZ 1.5.1b6 2.237    373     420
Snappy 1.1.0    2.091    323    1070
LZF             2.077    270     570
zlib 1.2.8 -1   2.730     65     280
LZ4 HC (r97)    2.720     25    2040
zlib 1.2.8 -6   3.099     21     300

有很多可用的实现,请查看:http ://code.google.com/p/lz4/

LZO - http://lzo-net.sourceforge.net/

LZO.Net 将 Markus "FXJ" Oberhumer 伟大的 LZO 压缩库 (V1.08) 的强大功能带到 .Net。它使用一个小的 C# 类包装对本机 DLL 的访问,保持 ANSI-C 库的原始速度。

活泼- https://code.google.com/p/snappy/

Snappy 是一个压缩/解压缩库。它的目标不是最大压缩或与任何其他压缩库的兼容性;相反,它的目标是非常高的速度和合理的压缩。

有两个 C# 本机实现可用:

QuickLZ - http://www.quicklz.com/

QuickLZ 是世界上最快的压缩库,每个内核达到 308 Mbyte/s。如果已获得商业许可,或者在 GPL 1、2 或 3 下,公开发布的任何内容都必须是开源的,则可以在商业许可下使用它。

本机实现 - QuickLZ C#

So far, only a subset of the library has been ported, 
namely the setting:

QLZ_COMPRESSION_LEVEL = 1 or 3 
QLZ_STREAMING_BUFFER = 0 
QLZ_MEMORY_SAFE = 0
于 2013-08-06T10:54:58.973 回答
1

查看 SharpCompress,它是专门为像您这样的目的而编写的。我使用它并且非常适合我的解决方案。我们在重写之前使用了 Xceed。

http://sharpcompress.codeplex.com/

SharpCompress 是一个用于 .NET/Mono/Silverlight/WP7 的压缩库,它可以解压缩、解压缩、解压缩、解压缩 unbzip2 和 ungzip,具有只进读和文件随机访问 API。实现了对 zip/tar/bzip2/gzip 的写支持。

主要功能是支持不可搜索的流,因此可以动态处理大文件(即下载流)。

于 2013-08-06T17:20:03.307 回答