2013-08-03 31 views
4

我需要做的是壓縮文件的64KB塊,因爲它們是從外部服務進入的,然後將所有壓縮數據實時傳輸到瀏覽器。 Xceed Real-Time在如何設置文件頭部,然後將多個64KB塊拼接成客戶端上的整個壓縮文件方面非常出色。這很好,你可以很容易地處理多個文件,把它放在一個循環中。是否有免費的壓縮實用程序,像Xceed Real-Time Zip一樣實時壓縮?

我的問題是:是否有一個免費的替代壓縮工具可以匹配Xceed的複雜性?我需要一些可以將文件的一部分壓縮並傳輸到瀏覽器的東西。幾乎所有我見過的免費選擇都需要在壓縮發生之前訪問整個文件。 Xceed很棒,但價格昂貴。只是想知道是否有一個可以實現這一目標的免費選擇。謝謝!

回答

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帶來馬庫斯 「FXJ」 Oberhumer的偉大LZO壓縮 庫(V1.08)到.NET的力量。它使用一個小C#類對原生 DLL進行訪問,保持ANSI-C 庫的原始速度。

斯納皮 - https://code.google.com/p/snappy/

斯納皮是壓縮/解壓縮庫。它不旨在最大壓縮爲 ,或與其他任何壓縮庫的兼容性爲 庫;相反,它的目標是非常高的速度和合理的壓縮。

兩個C#機實現可供選擇:

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

QuickLZ是世界上速度最快的壓縮庫,每個內核達到了308Mbps/s/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 
+0

我需要一個c#實現庫。你有沒有一個例子說明如何使用FastLZ爲動態文件創建標題,然後將其餘的標記標記到該標題? Xceed內置此功能。謝謝! – TheDude

+1

我已經更新了答案。我確實刪除了FastLZ,因爲它不適合你。所以你有4個選項:LZ4,LZO,Snappy,QuickLZ(基準測試的頂部)。 LZO是一個包裝。 QuickLZ C#實現有一些限制。無論如何,你可以和LZ4或Snappy一起去。 –

+0

LZ4可以解壓縮壓縮文件嗎? – zer0ne

1

退房SharpCompress,專門爲目的,如你寫的。我使用它並且適用於我的解決方案。我們在重寫之前使用了Xceed。

http://sharpcompress.codeplex.com/

SharpCompress是.NET /單聲道/ Silverlight的/ WP7能的unrar,un7zip,解壓縮,解壓縮unbzip2和ungzip與只進讀取和文件隨機訪問的API壓縮庫。寫支持zip/tar/bzip2/gzip被實現。

主要功能是支持不可查找的流,因此大文件可以即時處理(即下載流)。

+0

您是否有過如何使用SharpCompress實時壓縮64KB塊的例子?使用Xceed時,內置了爲每個文件創建標題的功能,然後將64KB塊標記爲該文件標題。 SharpCompress是否有類似的功能?希望能舉一個例子! – TheDude