我想連接兩個或更多gzip流而不重新壓縮它們。如何連接兩個或更多gzip文件/流
我的意思是我有一個壓縮到A.gz和B到B.gz,我想壓縮他們到單個gzip(A + B).gz沒有再次壓縮,使用C或C++。
幾個注意事項:
- 即使你可以CONCAT兩個文件和gunzip解會知道如何對付他們,大部分的程序將無法處理兩個塊。
- 我曾經看到過一個代碼示例,它只是通過解壓縮文件,然後操作原始文件,這比正常的重新壓縮快得多,但仍然需要O(n)CPU操作。
- 不幸的是,我找不到這個例子,我曾經發現過一次(只使用解壓縮連接),如果有人能指出它,我會很大。
注意:它不是this的重複,因爲提出的解決方案不符合我的需要。
Clearification編輯:
我想concate幾個壓縮HTML PICES並將它們發送到瀏覽器作爲一個頁面,按照要求:「接受編碼:gzip」,與respnse「內容編碼:gzip 「
如果流簡化爲cat a.gz b.gz >ab.gz
,Gecko(firefox)和KHTML web引擎只能獲得第一部分(a); IE6不會顯示任何內容,Google Chrome會正確顯示第一部分(a),第二部分(b)顯示爲垃圾(根本不會解壓縮)。
只有Opera處理得好。
所以我需要創建一個單個 gzip流的幾個塊,併發送它們而不重新壓縮。
更新:我在zlib的例子中發現了gzjoin.c,它只使用解壓縮。問題是減壓仍然比較簡單memcpy
。
它比目前最快的gzip壓縮還要快4倍。但這還不夠。
我需要的是找到我需要與gzip文件一起保存的數據,以便 不運行解壓過程,以及如何在壓縮過程中找到這些數據。
你真的想要壓縮它們嗎,還是將它們連接到同一個文件? – 2009-07-17 13:38:43
我想創建一個gzip壓縮文件/流/內存塊的兩個其他gzip壓縮文件/流/內存塊沒有解壓縮他們,連接他們,並再次壓縮他們。 – Artyom 2009-07-17 14:32:36
請參閱編輯中的清除。 – Artyom 2009-07-24 08:15:16