替换gzip文件中的内容而不将其解压缩

时间:2017-01-25 19:40:20

标签: java compression

我收到的是以gzip格式压缩的webservice xml文件。 xmls的原始大小约为80Mb,压缩版本大约为10Mb。这些xml文件存储在我们的缓存中。

xml root包含一个表示8位唯一ID的属性。因此,当我们从缓存中提供响应时,我们需要在将xml返回给最终用户之前,使用从另一个Web服务接收到的另一个ID来更改此ID。

所以,这个过程应该是:

  1. 解压缩缓存xml。
  2. 将缓存的ID替换为从Web服务收到的ID。
  3. 再次压缩文件并将其返回给客户端。
  4. 这是一个java软件。我想知道是否有任何选择来执行此替换而不解压缩整个文档并再次压缩它。任何形式的部分读写......我不知道。

    我一直在寻找一些可以做到这一点的java库,但我找不到任何东西(也许是因为它不可能)。

    有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:0)

没有。您必须对其进行解压缩,至少要找到ID编码的位置和方式。那么你可以a)真的很聪明,并弄清楚如何使用当前定义的代码表重新组合具有不同ID但相同位数的流,基本上解决一个难题(假设它可以完全解决),或b)使用新ID重新压缩整个事物。

如果您控制起始点的压缩,可以通过在ID之前切换到不压缩,在ID之后立即刷新块,存储块,然后继续,为此专门准备流。压缩。您可以注意输出流中的位置。然后,您可以稍后将ID直接替换为流中的ID。您还需要更新CRC,您可以使用独占的CRC或原始CRC以及旧的未压缩数据和新的未压缩数据的“原始”CRC。这只是旧ID和ID的异或,前后有一堆零填充数据长度。 “原始”CRC是CRC寄存器用零初始化并且没有最终异或的CRC。