有效地查找和替换gzip内容的数据

时间:2014-04-07 08:28:48

标签: c gzip

我基于Linux的程序输入是:

char *in_str, char *find_str, char *replacing_str

in_str是压缩数据(gzip)。

程序需要在未压缩的输入数据中找到find_str,将其替换为replacing_str,然后重新压缩数据。

这样做的简单方法是使用许多可用的gzip压缩/解压缩库中的一个来解压缩数据,处理未压缩的数据,然后重新压缩输出。但是我需要尽可能高效(它是一个RT程序)。

我想知道使用动态库(例如zlibc)方法或仅仅执行上述操作更有效。

或许重要的是要提到:

  • find_str和replacement_str字符串是数据的一小部分
  • 他们的长度不相等
  • find_str应该出现约4或5次
  • 未压缩数据len为~2K - 6K字节

是否有人熟悉实施此方法的有效方法?

由于

1 个答案:

答案 0 :(得分:1)

无论如何都要解压缩,以便搜索字符串。 (您可能只能使用一次并构建索引。但是这可能比未压缩的数据大得多,因此您可能只是将其解压缩而不是压缩。)

您可以通过提前准备gzip文件以使用例如zlib的Z_FULL_FLUSH选项在较小的无历史记录单元中进行压缩来避免重新压缩所有这些内容。这将根据您的使用频率略微降低压缩,但如果只需要重新压缩许多块中的一个,将大大加快构建输出。