我收到的是以gzip格式压缩的webservice xml文件。 xmls的原始大小约为80Mb,压缩版本大约为10Mb。这些xml文件存储在我们的缓存中。
xml root包含一个表示8位唯一ID的属性。因此,当我们从缓存中提供响应时,我们需要在将xml返回给最终用户之前,使用从另一个Web服务接收到的另一个ID来更改此ID。
所以,这个过程应该是:
这是一个java软件。我想知道是否有任何选择来执行此替换而不解压缩整个文档并再次压缩它。任何形式的部分读写......我不知道。
我一直在寻找一些可以做到这一点的java库,但我找不到任何东西(也许是因为它不可能)。
有什么想法吗?感谢。
答案 0 :(得分:0)
没有。您必须对其进行解压缩,至少要找到ID编码的位置和方式。那么你可以a)真的很聪明,并弄清楚如何使用当前定义的代码表重新组合具有不同ID但相同位数的流,基本上解决一个难题(假设它可以完全解决),或b)使用新ID重新压缩整个事物。
如果您控制起始点的压缩,可以通过在ID之前切换到不压缩,在ID之后立即刷新块,存储块,然后继续,为此专门准备流。压缩。您可以注意输出流中的位置。然后,您可以稍后将ID直接替换为流中的ID。您还需要更新CRC,您可以使用独占的CRC或原始CRC以及旧的未压缩数据和新的未压缩数据的“原始”CRC。这只是旧ID和ID的异或,前后有一堆零填充数据长度。 “原始”CRC是CRC寄存器用零初始化并且没有最终异或的CRC。