gpt4 book ai didi

java - 是否有任何存档格式既支持对许多小条目的有效压缩,又支持对单个条目的直接访问?

转载 作者:行者123 更新时间:2023-12-02 07:15:39 25 4
gpt4 key购买 nike

这是我的用例:

  • 我想将许多大约 1K 的小条目存储到大约 8M 的存档文件中。
  • 我希望能够有效地读取单个条目(无需读取整个文件)。
  • 我希望能够有效地压缩存档。在我执行的测试中,TAR+ZIP 存档比 ZIP 存档小 4 倍。这一点也不奇怪,没有太多机会压缩单个 1K 条目。
  • 我不需要更新存档。一旦创建,就不可更改。

是否有同时支持两者(全局压缩+单独访问)的存档格式?理论上,这两个目标并不相互排斥。

注意:这是一个 Java 项目,因此我仅限于也具有 java 库的格式。

最佳答案

我不知道针对您的问题的固定解决方案,因此您可能需要自己编写。

这当然可以做到。我会使用 tar 格式,因为它简单且易于理解,但它需要一个带有压缩存档索引信息的辅助文件。您要做的就是控制 tar 文件的压缩以创建不需要历史记录的入口点。这些入口点需要比 1K 远得多才能实现良好的压缩,但它们可以足够接近以提供对 1K 文件的相对快速的随机访问。

最简单的方法是使用 gzip 单独压缩 tar 文件的 block ,这些 block 代表完整的文件集,这些文件总共大约 128K 字节。 gzip 流可以简单地连接起来,生成的 .tar.gz 文件可以与 tar 实用程序正常工作。 gzip 格式的一个属性是,串联的有效 gzip 流也是有效的 gzip 流。

辅助文件将包含 tar 存档中的文件列表、未压缩 tar 文件中的文件大小和偏移量,然后分别包含每个 gzip 流起始点的压缩和未压缩偏移量。然后,在提取文件时,您将在未压缩的 tar 文件中查找其偏移量,找到最大未压缩偏移量小于或等于该文件偏移量的 gzip 流,然后从相应的压缩偏移量开始解压缩,直到到达该文件.

对于此示例,平均而言,您只需解压缩 64K 即可获取存档中的任何给定文件。

关于java - 是否有任何存档格式既支持对许多小条目的有效压缩,又支持对单个条目的直接访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14964288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com