我需要做的是压缩文件的64KB块,因为它们是从外部服务进来的,然后实时地将这一块压缩数据流式传输到浏览器。 Xceed Real-Time非常棒,您可以设置文件的标头,然后将多个64KB块拼凑成客户端上的整个压缩文件。这很好用,您可以通过将它放在循环中轻松处理多个文件。
我的问题是:是否有一个免费的替代压缩实用程序可以匹配Xceed的复杂性?我需要能够压缩文件并将文件的一部分流式传输到浏览器的东西。几乎所有我见过的免费替代方案都需要在压缩发生之前访问整个文件。 Xceed很棒,但价格昂贵。只是想知道是否有一个可以实现这一目标的免费替代品。谢谢!
答案 0 :(得分:6)
您正在寻找的是流压缩方法。好消息是你有很多选择。还请注意你必须考虑内存,因为一些解决方案(基于字典)可能需要大量内存,所以测试和调整。
为了保持我的答案简短,我建议尝试一下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。它包含对本机的访问 DLL与一个小的C#类保持ANSI-C的原始速度 库。
Snappy - 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
答案 1 :(得分:1)
查看SharpCompress,专门为您的目的而编写。我使用它并且非常适合我的解决方案。我们在重写之前使用了Xceed。
http://sharpcompress.codeplex.com/
SharpCompress是一个用于.NET / Mono / Silverlight / WP7的压缩库,可以解压缩unzzip,解压缩,解压缩unbzip2和ungzip,只需使用只读和文件随机访问API。已实现对zip / tar / bzip2 / gzip的写支持。
主要功能是支持不可搜索的流,因此可以即时处理大型文件(即下载流)。