向存档文件追加文件而无需读取/重写整个存档。

6

我有许多文件需要存储在一个归档文件中。我的第一种方法是将文件存储在gzip压缩的tarball中。问题是,如果添加单个文件,我必须重写整个存档。

我可以放弃gzip压缩,但添加文件仍将耗费时间。

您建议使用哪种其他归档格式以实现快速追加操作?


你能自己编写一个容器,还是需要一个众所周知的算法来使其他人/系统处理结果文件? - k_b
1
我尽量避免编写自己的容器。原因之一是人们应该能够打开文件。我还会认为编写自己的容器会导致更多的工作,并且最初会有更多的错误。 - Benedikt Waldvogel
2个回答

2

ZIP文件格式的设计允许在不完全重写的情况下进行追加,并且在Unix系统中也非常普遍。


1
问题https://dev59.com/qHE95IYBdhLWcg3wn_f2与此高度相关。我不确定是否有任何(Java)实现允许附加而无需完全重写。 - Benedikt Waldvogel

2

ZIP和TAR格式(以及旧的AR格式)允许在不进行完全重写的情况下追加文件。然而:

  • Java存档类不支持此操作模式。
  • 如果您追加现有文件,则文件追加很可能会导致归档文件中出现多个文件副本。
  • ZIP和AR格式具有需要在文件追加操作后重新编写的目录。标准实用程序在重新编写目录时采取预防措施,但理论上可能会出现归档目录丢失或损坏的情况,如果追加失败。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接