2014-04-07 33 views
0

我的C基於Linux的程序輸入是:查找和替換對的gzip內容數據有效

char *in_str, char *find_str, char *replacing_str 

in_str的是壓縮數據(gzip的)。

程序需要在未壓縮的輸入數據中找到find_str,將其替換爲replacing_str,然後重新壓縮數據。

這樣做的簡單方法是使用許多可用的gzip compress/uncompress庫之一來解壓縮數據,操作未壓縮的數據,然後重新壓縮輸出。不過,我需要儘可能高效(這是一個RT程序)。

我想知道使用即時庫(例如zlibc)方法還是僅執行上述操作會更高效。

也許更何況,它是重要的:

  • 的find_str和replacing_str字符串是數據的一小部分
  • 它們的長度是不相等的
  • 假定的find_str出現約4或5倍
  • 未壓縮數據len爲〜2K - 6K字節

確實任何熟悉且Eff採用這種方式來實現這一點?

謝謝

+0

您可能可以實施緩存方案。如果一個特定的文件被解壓縮,則保留解壓縮(和修改)的文本一段時間。然後後續請求不需要解壓縮。當達到緩存空間的特定閾值時,解壓縮的文件可以用最久以前使用的文件進行重新壓縮。對於某些類型的使用,這可能是一個真正的好處,例如,如果活動是突發和異步 – Vorsprung

回答

1

你將不得不解壓,以搜索字符串。 (你可能只能這樣做一次並建立一個索引,但這可能比未壓縮的數據大得多,所以你不妨將它存儲爲未壓縮的數據。)

你可以避免重新壓縮所有通過使用例如zlib的Z_FULL_FLUSH選項提前準備gzip文件以較小的歷史記錄單位進行壓縮。這將根據您的操作頻率稍微降低壓縮率,但如果需要重新壓縮多個塊中的一個塊,則會加速構建輸出。